我正在努力理解 Lua 中的这种行为。如果我在本地控制台执行:
tab={}
tab[100] = "E"
表格如下所示:
{
[100] = "E"
}
现在我正在用几个条件在 for 循环中填充我的表:
cell_types = {}
cell = 1
for y=1, 1000 do
for x=1, 1000 do
if some_condition then
cell_types[cell] = "E"
elseif some_condition then
cell_types[cell] = "M"
else
cell_types[cell] = "C"
end
cell = cell+1
end
end
现在表格看起来像这样:
{ "E", "E", "M", "E", "C", "C", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E" }
如果我删除第一个表调用 (cell_types[cell] = "E"),那么我再次拥有键/值对:
{
[101] = "M",
[102] = "M",
[103] = "M",
[104] = "M",
[105] = "M",
[106] = "M",
[107] = "M"
}
什么可能导致此行为?如何确保始终将键/值对存储在表中?
谢谢。
最佳答案
Lua 表始终是键值对的集合。
它只是在内部进行了优化,将连续序列存储为数组,将不连续值存储为 HashMap 。
通过删除一些赋值,例如 cell_types[cell] = "E"
情况,您将在序列中引入漏洞,因此它不再属于数组实现部分,并且必须使用 pairs()
作为 HashMap 进行迭代。请注意,ipairs()
只会迭代表的数组部分,并且会在某个未定义的点处停止,在那里它将按顺序找到一个洞。
关于loops - for循环期间 key 未存储在lua表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58670048/