for循环期间密钥未存储在lua表中

问题描述 投票:1回答:1

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

什么可能导致此行为?以及如何确保始终将键/值对存储在表中?

谢谢。

loops lua key
1个回答
0
投票

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

仅在内部进行了优化,可将连续序列存储为数组,而将不连续值存储为哈希图。

[通过删除某些赋值,例如cell_types[cell] = "E"情况,您将在序列中引入漏洞,因此它不再属于数组实现部分,而必须使用pairs()迭代为哈希映射。请注意,ipairs()仅会迭代表的数组部分,并将停止在某个未定义的点,在该点处将依次找到一个孔。

© www.soinside.com 2019 - 2024. All rights reserved.