lua - 通过引用与 ipairs 循环访问表的性能

标签 lua

我正在修改一个游戏。如果可能的话,我想针对经常调用的函数优化我的代码。该函数将查看字典表(估计包含 10-100 个条目)。我正在考虑两种模式 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")

哪种模式平均应该更快?我希望“本地”引用更快(它肯定更整洁),但也许这是一个愚蠢的假设?我能够(在某种程度上)按照查找频率的顺序对tableB进行排序,而(据我所知)tableA在Lua中将具有随机内部顺序即使我以正确的顺序声明键,也是默认的。

最佳答案

查找表总是比每次搜索表都要快。

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

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

因此,如果您仅出于此目的构建该数据结构,请立即使用查找表。

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

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

关于lua - 通过引用与 ipairs 循环访问表的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69705743/

相关文章:

lua - 函数名后没有括号

lua - 需要名称中带有点的文件夹中的模块

linux - wxLua 'undefined symbol: luaopen_libwx'(Linux Mint 16)

file-io - 用Lua检查文件是否存在

lua - 在 corona sdk 中显示背景图像

c++ - Lua SWIG 基础知识

lua - torch mist 简单

lua - Lua 中逗号分隔的 return 语句如何充当函数调用?

lua - 如何从lua中的死协程获取回溯和错误消息

c# - 使用套接字将数据从C#应用程序发送到Lua应用程序