我正在努力了解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表始终是键值对的集合。
仅在内部进行了优化,可将连续序列存储为数组,而将不连续值存储为哈希图。
[通过删除某些赋值,例如cell_types[cell] = "E"
情况,您将在序列中引入漏洞,因此它不再属于数组实现部分,而必须使用pairs()
迭代为哈希映射。请注意,ipairs()
仅会迭代表的数组部分,并将停止在某个未定义的点,在该点处将依次找到一个孔。