Lua表格访问效率

我有一个关于访问 Lua 表中数据的问题。

假设有一个很大的 Lua 表,如下所示:

 tbl = {
         {
           blockIdx = 5,
           key1 = "val1",
           key2 = "val2",
           ...
         },
         {
           blockIdx = 30,
           key1 = "val11",
           key2 = "val12",
           ...
         },
         {
           blockIdx = 83,
           key1 = "val21",
           key2 = "val22",
           ...
         },
         ...
       }

现在,我想找到其中一个 blockIdx38 的块。

通常,我会使用 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])

所以我的问题是,两种方法之间是否有任何性能差异?

也许在 Lua 中执行 tbl[38] 实际上做了一个 for 循环吗?

或者就像 C/C++ 中的数组一样,我们可以使用 [ ] 直接访问内存,而不需要 for 循环,显然具有更好的性能。

点赞
用户1009479
用户1009479

小结

表现不同,第二种方法更有效率。

Lua table 内部包含一个数组部分和一个散列表部分,如果表是一个序列,那么序列部分将由数组部分实现。但是你第二个示例中的表不是一个序列,可能由散列表部分实现。在这种情况下,性能不像在 C/C++ 中访问数组,而类似于访问散列表,但仍然非常快。

因此,第二段代码更快,因为它不像第一个示例那样迭代元素。

2014-04-24 02:33:31