【发布时间】:2015-02-15 02:08:06
【问题描述】:
考虑以下 lua 表:
foo = {
bar1 = {a = 1, b = 2, c = "hello"},
bar2 = {a = 5, b = 2, c = "bbq"},
bar3 = {a = 76, b = 13, c = "pwnd"}
}
我正在尝试使用 lua C API 迭代此表以检索键名 bar1、bar2 和 bar3。我使用lua_next(L, -2) 函数按照许多人的建议进行迭代,但问题是它以随机顺序返回元素。每次运行的顺序都会改变。
我使用以下代码:
for( lua_pushnil(L); lua_next(L, -2) != 0; lua_pop(L, 1) )
{
printf("%s\n", lua_tostring(L, -2));
}
大多数时候,输出是无序的,比如bar2 bar1 bar3。幸运时,它被订购了。有没有一种简单的方法可以以有序的方式循环表键?我使用但订购的等效代码是什么?谢谢!
编辑:
我知道我使用的是地图而不是数组。但是在 lua 脚本中,我们有 ipairs 可以很好地适应这种情况。我正在查看等效的 C API。我发现 this stackoverflow answer 给出了不同的答案,但它对我不起作用,所以我想知道这个答案是否正确或相关。
【问题讨论】:
-
听起来 Lua 在内部将键值存储为哈希表。如果您想保持秩序,也许更好的解决方案是将条形条目存储为列表,而不是地图