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

如何使用字符串键保持Lua表的顺序?,lua,lua-table,Lua,Lua Table,这里有一个例子 local query = {} query['count'] = 1 query['query'] = 2 for k,v in pairs(query) do print(k) end 上面的内容将首先打印query,然后打印count 在不添加int索引键的情况下,如何确保在循环表时键字符串保持其顺序?我在注释中回答了这个问题,但我将其移到这里是为了更好地了解我所说的内容 local queryindex = {"count", "query"} local qu

这里有一个例子

local query = {}
query['count'] = 1
query['query'] = 2
for k,v in pairs(query) do
    print(k)
end
上面的内容将首先打印
query
,然后打印
count


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

我在注释中回答了这个问题,但我将其移到这里是为了更好地了解我所说的内容

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

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

只要保证值从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

在Lua中,只有具有基于1的连续整数键的表(也称为数组表)才能按顺序进行解析

因此,如果您想按顺序解析表
t
,您要做的是:

  • 将其键收集到类似于表的数组中
  • 排序
  • 使用
    表迭代
    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

也可以创建一个更惯用的表,但我从来没有这样做过。

对于字典表,我不相信它会保持相同的顺序。如果您想保持某种顺序,我建议您按照您想要的顺序创建第二个索引表,其中包含字段。然后在该表中循环并调用query[v]。你的
for
循环的主体将只打印数字,你的意思是
打印(v)
?不,我的意思正是我所回答的。我假设query['count']和query['query']实际上不是数字,而是字符串,他只是用数字来演示定位<代码>打印(v)只打印“计数”或“查询”,而不打印“查询”表中的值。这是不正确的。ipairs()按整数键对表中的元素进行排序,并将忽略那些键不是整数的元素。@Jinfeng,你读过原始问题了吗?这正是op想要的。Queryindex由数字键索引。这将按字母顺序对键进行排序。我明白它应该保持他们的秩序,就像他们定义的那样(这也是我要寻找的)