Performance Lua表访问效率

Performance Lua表访问效率,performance,lua,lua-table,Performance,Lua,Lua Table,我对访问Lua表中的数据有疑问。 比如说,有一个大型Lua表,如下所示: tbl = { { blockIdx = 5, key1 = "val1", key2 = "val2", ... }, { blockIdx = 30, key1 = "val11", key2 = "val12"

我对访问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内部做了一个
循环
或者就像C/C++中的数组一样,我们可以使用
[]
直接访问内存,而不使用
for
循环,

witch显然有更好的性能。

性能不同,第二种方法更有效

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


总之,第二段代码速度更快,因为它不像第一个示例那样遍历元素。

@Schollii我不在这方面跟你讲。要访问散列中的元素,只需计算键的散列码并使用该散列码查找元素。它不如数组访问速度快,但假设哈希函数足够好,它仍然相当快(一般情况下为O(1),最坏情况下为O(lgN)。@ColonelThirtyTwo啊,是的,是的,哈希函数使它成为一个O(1)操作,很抱歉,我在考虑另一种结构。我的评论有误导性,所以我将删除。@YuHao:hash表中
find
操作的最坏情况。。。O(lgN)?我认为元素的数量是线性的。