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

时间:2016-07-04 14:13:38

标签: 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 isParticular(s)
    return s == string1 or s == string2
end

print(isParticular(string1)) -- true
print(isParticular(randomString)) -- false

根据我的理解,table方法对于任何特定字符串和不同字符串都需要相同的时间,而由于短路评估而调用函数将花费更少的时间string1和更多时间string2randomString

此外,函数调用和表访问都会导致一些开销,但也许短路评估可能会产生差异(我认为速度较慢,特别是我认为我有超过2个特定的字符串,并且大多数情况下,字符串不会与其中任何一个匹配。)

那么我应该使用什么方法?

1 个答案:

答案 0 :(得分:2)

哈希表查找将胜过大型数据集的功能查找。所以,请使用第一种方法:

local isParticular = {
    string1 = true,
    string2 = true
}

print(isParticular[string1]) -- true
print(isParticular[randomString]) -- nil -> false