loops - for循环期间 key 未存储在lua表中

标签 loops lua key

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

相关文章:

lua - Lua中将字符串转换为数字

powershell - 如何使用整数键访问有序 PowerShell 哈希表中的值?

ios - 我怎么可能在我的 NSMutableDictionary 中得到重复的键?

c# - "foreach"和扩展方法: ForEach的区别

java - 保持循环运行以检查多个条件 - Java

java - PrintWriter 偶数问题

javascript - 在使用 forEach 循环执行每次迭代后添加延迟

lua - 从字符串生成超链接

function - 将二维数组传递给 Lua 中的函数

c++ - Qt多键组合事件