optimization - 表访问 vs 函数调用 + 条件判断 : which is faster?

标签 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

据我了解,表方法对于任何特定字符串和不同字符串都将花费相同的时间,而由于短路评估而导致的函数调用对于string1将花费更少的时间以及 string2randomString 的更多时间。

此外,众所周知,函数调用和表访问都会造成一点开销,但短路评估可能会产生影响(我认为速度较慢,特别是考虑到我有两个以上的特定字符串,并且大多数情况下,字符串不会与其中任何一个匹配)。

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

最佳答案

对于大型数据集,哈希表查找的性能优于函数查找。因此,采用第一种方法:

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

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

关于optimization - 表访问 vs 函数调用 + 条件判断 : which is faster?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38186822/

相关文章:

php - 哪种方法返回 true 或 false 更好?

python - Gekko 和中间变量

string - 拆分字符串并存储在lua中的数组中

lua - 已经放入},但错误仍然表明}是预期的?

lua - Torch 将文本写入文件

c++ - 如何使用重新定义的打印功能打印 Lua 表?

r - 在数据框或矩阵上应用()优化()?

javascript - 如何向 requirejs r.js 优化器添加仅在构建期间运行的插件?

string - 在Lua中,我可以在没有自定义函数的情况下轻松选择第N个结果吗?

lua - 通过TCP连接Lua发送字符串变量