Lua表访问效率

时间:2014-04-24 02:11:37

标签: performance lua lua-table

我有一个关于在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循环,
巫婆显然有更好的表现。

1 个答案:

答案 0 :(得分:5)

性能不同,第二种方法效率更高。

在内部,Lua表包含数组部分和散列部分,如果表是序列,则序列部分由数组部分实现。但是你的第二个例子中的表不是一个序列,它可能是由哈希部分实现的。在这种情况下的性能不像在C / C ++中访问数组,而是像访问哈希一样,这仍然很快。

总而言之,第二段代码更快,因为它不会像第一个例子那样遍历元素。