Optimization 表访问与函数调用+;条件决定:哪个更快?
我需要检查一个特定的字符串是否是一组预定字符串中的一个 我想到了两种方法:设置一个表,在特定值上返回trueOptimization 表访问与函数调用+;条件决定:哪个更快?,optimization,lua,lua-table,lookup-tables,function-call,Optimization,Lua,Lua Table,Lookup Tables,Function Call,我需要检查一个特定的字符串是否是一组预定字符串中的一个 我想到了两种方法:设置一个表,在特定值上返回true local isParticular = { [string1] = true, [string2] = true } print(isParticular[string1]) -- true print(isParticular[randomString]) -- nil -> false 或者设置一个函数以使用条件确定进行检查 function isPart
local isParticular = {
[string1] = true,
[string2] = true
}
print(isParticular[string1]) -- true
print(isParticular[randomString]) -- nil -> false
或者设置一个函数以使用条件确定进行检查
function isParticular(s)
return s == string1 or s == string2
end
print(isParticular(string1)) -- true
print(isParticular(randomString)) -- false
据我所知,对于任何特定字符串和不同字符串,table方法将花费相同的时间,而由于短路求值而导致的函数调用对于string1
将花费较少的时间,对于string2
和randomString
将花费更多的时间
此外,函数调用和表访问都会导致一些开销,但短路评估可能会产生影响(我认为速度较慢,特别是考虑到我有两个以上的特定字符串,而且大多数情况下字符串都不匹配)
那么我应该使用什么方法呢?对于大型数据集,哈希表查找的性能要优于函数查找。因此,使用第一种方法:
local isParticular = {
string1 = true,
string2 = true
}
print(isParticular[string1]) -- true
print(isParticular[randomString]) -- nil -> false
我就是这么想的!感谢您的确认。只有一种方法可以确保:同时配置两个!不过,我怀疑您是否会看到差异:如果您正在考虑使用
或链接,这告诉我您没有太多需要检查的项目,因此无需担心缩放问题。