我正在修改一个游戏。如果可能的话,我想针对经常调用的函数优化我的代码。该函数将查看字典表(估计包含 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/