如何使用字符串键保持Lua表的顺序?

时间:2013-10-08 23:37:12

标签: lua lua-table

这是一个例子

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

以上内容将首先打印query然后打印count

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

3 个答案:

答案 0 :(得分:10)

我在评论中回答,但是我正在这里移动它以更好地了解我在说什么。

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

for _,v in ipairs(queryindex) do
  print(query[v])
end

答案 1 :(得分: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

答案 2 :(得分:2)

在Lua中,只能按顺序解析具有基于1的连续整数键(a.k.a。数组表)的表。

因此,如果您想按顺序解析表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

也可以创建an iterator来更加惯用,但我从来没有这个需要。