Lua for循环期间键值未存储在lua表中

我正在努力理解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"
}

什么会导致这种行为?如何确保始终在我的表中存储键/值对?

谢谢。

点赞
用户5675002
用户5675002

Lua表格

Lua表格始终是键值对的集合。

只是在内部它被优化为以数组为连续序列存储的方式,以哈希图为不连续的值存储的方式。

通过删除一些赋值,比如cell_types[cell] = "E"的情况,您引入了序列中的空洞,因此它不再属于数组实现部分,并且必须使用pairs()作为哈希图进行迭代。请注意,ipairs()仅会迭代表格的数组部分,并且在某个未定义的点停止,在那里它会发现序列中的空洞。

2019-11-02 11:10:04