Table 访问 vs 函数调用 + 条件判断:哪个更快?
Table access vs function call + conditional determination: which is faster?
我需要检查特定字符串是否是一组预定字符串中的一个。
我想到了两种方法:在特定值上设置 table 到 return 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
.
的更多时间
此外,众所周知,函数调用和 table 访问都会造成一些开销,但短路评估可能会有所不同(我认为速度较慢,特别是考虑到我有更多超过 2 个特定的字符串,并且大多数时候该字符串不匹配它们中的任何一个)。
那我应该用什么方法呢?
散列-table 查找的性能优于大型数据集的函数查找。所以,使用第一种方法:
local isParticular = {
string1 = true,
string2 = true
}
print(isParticular[string1]) -- true
print(isParticular[randomString]) -- nil -> false
我需要检查特定字符串是否是一组预定字符串中的一个。
我想到了两种方法:在特定值上设置 table 到 return 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
.
此外,众所周知,函数调用和 table 访问都会造成一些开销,但短路评估可能会有所不同(我认为速度较慢,特别是考虑到我有更多超过 2 个特定的字符串,并且大多数时候该字符串不匹配它们中的任何一个)。
那我应该用什么方法呢?
散列-table 查找的性能优于大型数据集的函数查找。所以,使用第一种方法:
local isParticular = {
string1 = true,
string2 = true
}
print(isParticular[string1]) -- true
print(isParticular[randomString]) -- nil -> false