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" 和布尔值,两个值完全相同,但我想知道如果值不同会发生什么,哪个会保留?现在我脑海中浮现出无数场景。
我无法重现这个问题,但我们的做法是:
- 用json
读取文件
- 将json解码为luatable
- Add/update 在 table 中的条目,只需
tab[key] = value
- 保存文件
编辑:
那么,现在重现这个问题:
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"
字符串。
我不确定怎么做,但我们设法创建了一个 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" 和布尔值,两个值完全相同,但我想知道如果值不同会发生什么,哪个会保留?现在我脑海中浮现出无数场景。
我无法重现这个问题,但我们的做法是:
- 用json 读取文件
- 将json解码为luatable
- Add/update 在 table 中的条目,只需
tab[key] = value
- 保存文件
编辑: 那么,现在重现这个问题:
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"
字符串。