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

ste*_*ven 11 lua lua-table

这是一个例子

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

上述首先打印query然后count.

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

Jos*_*osh 10

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

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

for _,v in ipairs(queryindex) do
  print(query[v])
end
Run Code Online (Sandbox Code Playgroud)


kik*_*ito 6

在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
Run Code Online (Sandbox Code Playgroud)

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