有没有办法迭代lua字典以便创建它?

时间:2015-09-08 07:30:26

标签: lua lua-table

我需要按照创建的顺序遍历Lua字典。

例如:

t = {
['some'] = 'xxx',
['random'] = 'xxx',
['data'] = 'xxx',
['in'] = 'xxx',
['table'] = 'xxx',
}

使用pair进行正常迭代会产生随机序列顺序:

for key, val in pairs(t) do
   print(key.." : "..val)
end

random : xxx
some : xxx
data : xxx
table : xxx
in : xxx

我需要:

some : xxx
random : xxx
data : xxx
in : xxx
table : xxx

1 个答案:

答案 0 :(得分:2)

编辑:更改了答案,旧答案在下面以供参考

-- function definition
function addNewItem(keyTable, myTable, key, value)
    table.insert(keyTable, key)
    myTable[key] = value 
end 

要在表格中添加新对:

-- you may need to reset keyTable and myTable before using them
keyTable = { }
myTable = { }

-- to add a new item
addNewItem(keyTable, myTable, "key", "value")

然后,按照添加键的顺序进行迭代:

for _, k in ipairs(keyTable) do 
    print(k, myTable[k]) 
end

OLD ANSWER

你是创建表的人(Lua称这些表而不是字典)?如果是这样,您可以尝试以下内容:

-- tmp is a secondary table
function addNew(A, B, key, value)
  table.insert(A, key)
  B[key] = value
end

-- then, to browse the pairs
for _,key in ipairs(table) do
  print(key, B[key])
done

这个想法是你使用两个表。一个人拿着钥匙'你添加(A)和另一个(B)实际值。它们看起来像这样:

因为A以类似

的方式配对键
1 - key1
2 - key2
...

然后ipairs(A)将始终按照您添加的顺序返回键。然后 使用这些键来访问数据

data = B[key1]