通过引用与 ipairs 循环访问 table 的性能

Performance of accessing table via reference vs ipairs loop

我正在修改游戏。如果可能的话,我想针对经常调用的函数优化我的代码。该函数将查找字典 table(由估计的 10-100 个条目组成)。我正在考虑 2 种模式 a) 直接引用和 b) 使用 ipairs:

查找

模式 A

tableA = { ["moduleName.propertyName"] = { some stuff } } -- the key is a string with dot inside, hence the quotation marks
result = tableA["moduleName.propertyName"]

模式 B

function lookup(type)
   local result
   for i, obj in ipairs(tableB) do
      if obj.type == "moduleName.propertyName" then
          result = obj
          break
      end
   end
   return result
end

***

tableB = { 
    [1] = { 
        type = "moduleName.propertyName", 
        ... some stuff ... 
    } 
}
result = lookup("moduleName.propertyName")

哪种模式的平均速度应该更快?我希望 'native' 引用更快(它肯定更整洁),但也许这是一个愚蠢的假设?我能够(在某种程度上)按照查找频率的顺序对 tableB 进行排序,而(据我所知)tableA 默认情况下 Lua 随机内部顺序甚至如果我以正确的顺序声明密钥。

查找 table 总是比每次搜索 table 快。

对于 100 个元素,这是一个索引操作,而最多 100 个循环周期、迭代器调用、条件语句...

尽管如此,如果您使用如此少的元素会在您的应用程序中体验到差异,这是值得怀疑的。

因此,如果您仅为此目的构建该数据结构,请立即进行查找 table。

如果您已经将此数据结构用于其他目的,并且只想查找一次,请循环遍历 table。

如果您已经有了这个结构并且需要多次查找值,请为此目的构建一个查找 table。