2016-07-04 20 views
2

我需要檢查一個特定的字符串是否是一組預定義的字符串之一。表訪問vs函數調用+條件確定:哪個更快?

兩種方法做到這一點來到我的腦海:建立一個表,在一個特定的值

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

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

返回true或設置功能與條件決定

function isParticular(s) 
    return s == string1 or s == string2 
end 

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

檢查它根據我的理解,對於任何特定的字符串和不同的字符串,表格方法都需要相同的時間,而由於短路評估的函數調用將花費更少的時間用於string1以及更多的時間用於string2randomString。另外,函數調用和表訪問都會導致一些額外開銷,但也許短路評估可能會產生差異(在我認爲更慢的時候,尤其是考慮到我有超過2個特定的字符串和大多數時候這個字符串都不會與其中的任何一個匹配)。

那麼我應該使用什麼方法?

+0

只有一種方法可以肯定:配置文件都!但是,我懷疑你會看到不同之處:如果你正在考慮使用'或'鏈接,那告訴我你沒有太多的東西需要檢查,所以不用擔心縮放。 –

回答

2

散列表查找將勝過大數據集的功能查找。所以,用第一種方法:

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

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

正是我所想的!感謝您的確認。 – user6245072