表格访问 vs 函数调用 + 条件判断:哪个更快?

我需要检查一个特定的字符串是否属于一组预定义的字符串之一。

我想到了两种方法:设置一个表来返回特定值上的 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 则需要更多的时间。

另外,函数调用和表格访问都会造成一些开销,但短路计算可能会使差异(我认为是变慢的,尤其是当我有不止两个特定字符串和大多数时间该字符串不匹配任何一个特定字符串时)。

那么我应该使用哪种方法?

点赞
用户1190388
用户1190388

对于大数据集,哈希表查找比函数式查找更快。因此,选择第一种方法:

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

print(isParticular[string1]) -- true
print(isParticular[randomString]) -- nil -> false
2016-07-04 15:01:22