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

以下是一个示例

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

以上代码将首先打印 query,然后是 count

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

点赞
用户308010
用户308010

我在评论中回答了,但是我将其移动到这里以更好地说明我的意思。

local queryindex = {"count", "query"} // 创建索引表
local query = {} // 创建查询表
query['count'] = 1 // 将1添加到计数器
query['query'] = 2 // 将2添加到查询器

// 浏览索引表并打印查询表中对应的值
for _,v in ipairs(queryindex) do
  print(query[v])
end
2013-10-08 23:51:09
用户1009479
用户1009479

只要值从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-09 00:55:41
用户312586
用户312586

在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-09 08:19:41