我有一个关于在Lua表中访问数据的问题 比方说,有一个如下的大型Lua表:
tbl = {
{
blockIdx = 5,
key1 = "val1",
key2 = "val2",
...
},
{
blockIdx = 30,
key1 = "val11",
key2 = "val12",
...
},
{
blockIdx = 83,
key1 = "val21",
key2 = "val22",
...
},
...
}
现在我想找到blockIdx
之一的块,例如38
。
通常,我想使用for
来查找块:
for k,v in pairs(tbl) do
if v.blockIdx == 38 then
blahFunction(v)
end
end
但我不认为这对于大桌子来说是个好主意 所以我稍微修改了一下表:
tbl = {
[5] = {
key1 = "val1",
key2 = "val2",
...
},
[30] = {
key1 = "val11",
key2 = "val12",
...
},
[83] = {
key1 = "val21",
key2 = "val22",
...
},
...
}
然后我可以用一行轻松访问我的块:
blahFunction(tbl[38])
所以我的问题是,两种方法之间是否有任何不同的表现?
也许做tbl[38]
实际上在Lua里面做了for
循环?
或者就像C / C ++中的数组一样,我们可以使用[ ]
直接访问内存而不使用for
循环,
巫婆显然有更好的表现。
答案 0 :(得分:5)
性能不同,第二种方法效率更高。
在内部,Lua表包含数组部分和散列部分,如果表是序列,则序列部分由数组部分实现。但是你的第二个例子中的表不是一个序列,它可能是由哈希部分实现的。在这种情况下的性能不像在C / C ++中访问数组,而是像访问哈希一样,这仍然很快。
总而言之,第二段代码更快,因为它不会像第一个例子那样遍历元素。