在 for 循环期间密钥未存储在 lua 表中
Posted
技术标签:
【中文标题】在 for 循环期间密钥未存储在 lua 表中【英文标题】:Key not stored in lua table during for-loop 【发布时间】:2020-02-28 09:20:53 【问题描述】:我很难理解 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"
什么可能导致这种行为?以及如何确保始终将键/值对存储在我的表中?
谢谢。
【问题讨论】:
【参考方案1】:Lua 表始终是键值对的集合。
它只是在内部进行了优化,以将连续序列存储为数组,将不连续值存储为哈希映射。
通过删除一些赋值,例如cell_types[cell] = "E"
的情况,您在序列中引入了漏洞,因此它不再属于数组实现部分,并且必须作为带有pairs()
的哈希映射进行迭代。请注意,ipairs()
只会迭代表的数组部分,并且会停在某个未定义的点,在那里它会依次找到一个洞。
【讨论】:
以上是关于在 for 循环期间密钥未存储在 lua 表中的主要内容,如果未能解决你的问题,请参考以下文章