Lua table - 两个条目具有相同的键

Lua table - two entries with same key

我不确定怎么做,但我们设法创建了一个 table,其中两个密钥完全相同。当对 table 的 pairs 执行 for 循环并打印键和值时,我们得到:

1    true
1    true

我们认为这可能是不同类型的问题,所以我们决定将其转换为 json(我们使用 Corona SDK 和内部 json 模块)。

结果相当惊人:

"ourTable" : { "1" : true, "1" : true }

我们将其存储在文件中以检查值,"1" 的两个十六进制值均为 31

所以另一个测试:将 json 转换为 lua table 并且...与之前相同的结果:具有相同键的两个条目。

我以前从未见过这样的事情,老实说,我不知道如何检测和预防这种情况。 我们已经使用 lua & corona 几年了,这是我们第一次检测到这样的情况,但它可能以前发生过,但我们没有检测到。它可能会导致一些令人难以置信的错误结果。

Corona SDK 正在使用 Lua 5.1.

我们将此 table json 编码存储在一个文件中。重新启动应用程序后,文件再次加载,它只包含一个条目!现在......这个 table 只包含 "id" 和布尔值,两个值完全相同,但我想知道如果值不同会发生什么,哪个会保留?现在我脑海中浮现出无数场景。

我无法重现这个问题,但我们的做法是:

  1. 用json
  2. 读取文件
  3. 将json解码为luatable
  4. Add/update 在 table 中的条目,只需 tab[key] = value
  5. 保存文件

编辑: 那么,现在重现这个问题:

local d = {true} 
d["1"]=true 
for k,v in pairs(d) do 
    print(k,v) 
end


1   true
1   true

其实在我添加重现问题的方法后,发生了什么事情就很明显了。 table变混了

当我这样做的时候:

for k,v in pairs(d) do 
    print(k,v, type(k)) 
end

这一切都说得通:

1   true    number
1   true    string

我们现在唯一的问题是 Corona SDK 中的 json 模块将 1 数字更改为 "1" 字符串。