Optimization 表访问与函数调用+;条件决定:哪个更快?

Optimization 表访问与函数调用+;条件决定:哪个更快?,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

我需要检查一个特定的字符串是否是一组预定字符串中的一个

我想到了两种方法:设置一个表,在特定值上返回true

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

我就是这么想的!感谢您的确认。只有一种方法可以确保:同时配置两个!不过,我怀疑您是否会看到差异:如果您正在考虑使用
链接,这告诉我您没有太多需要检查的项目,因此无需担心缩放问题。