14

这是一个例子

local query = {}
query['count'] = 1
query['query'] = 2
for k,v in pairs(query) do
    print(k)
end

上面会先打印query然后count

当我遍历表时,如何确保在不添加 int 索引键的情况下键字符串保持顺序?

4

3 回答 3

13

我在评论中回答了,但我把它移到这里是为了更好地了解我在说什么。

local queryindex = {"count", "query"}
local query = {}
query['count'] = 1
query['query'] = 2

for _,v in ipairs(queryindex) do
  print(query[v])
end
于 2013-10-08T23:51:09.253 回答
3

在 Lua 中,只能按顺序解析具有从 1 开始的连续整数键的表(也称为数组表)。

所以,如果你想t按顺序解析一个表,你要做的是:

  • 将其键收集到类似数组的表中
  • keys对该表进行排序
  • 使用keys表迭代t

例子:

function sortedKeys(query, sortFunction)
  local keys, len = {}, 0
  for k,_ in pairs(query) do
    len = len + 1
    keys[len] = k
  end
  table.sort(keys, sortFunction)
  return keys
end

...

local query = {}
query['count'] = 1
query['query'] = 2
for _,k in pairs(sortedKeys(query)) do
  print(k, query[k])
end

也可以创建一个迭代器来更习惯地执行此操作,但我从来没有需要。

于 2013-10-09T08:19:41.380 回答
2

只要保证该值从 1、2、3 到某个没有孔且没有重复的 N,就像在您的示例中一样,您可以使用反向键值对构建序列,如下所示:

local seq = {}
for k,v in pairs(query) do
    seq[v] = k 
end

for _,v in ipairs(seq) do
    print(v)
end
于 2013-10-09T00:55:41.033 回答