2016-07-04 4 views
2

特定の文字列が所定の文字列のセットであるかどうかを確認する必要があります。それを行うにはテーブルアクセスと関数呼び出し+条件付き判定:どちらが速いのですか?

2つの方法が私の心に来た:特定の値

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 
でそれをチェックする機能を設定するにはtrueを返すためにテーブルを設定

私が理解しているところでは、短絡評価のために関数呼び出しがstring1のほうが時間がかかり、string2の時間がかかるのに対して、テーブルメソッドは特定の文字列と異なる文字列の両方に対して同じ時間を要すると考えていますおよびrandomString

また、関数呼び出しとテーブルアクセスの両方が少しのオーバーヘッドを引き起こすことで知られていますが、短絡評価によって差が出る可能性があります(遅いと思います。ほとんどの場合、文字列はそれらのいずれとも一致しません)。

どうすればよいですか?

+0

確かめるには1つの方法があります:両方のプロファイル!しかし、あなたは違いが分かるとは思っていません。あなたがチェックする必要があるアイテムがあまりないので、チェーンチェンジを使うことを考えているなら、スケーリングについて心配する必要はありません。 –

答えて

2

ハッシュテーブルルックアップは、大規模なデータセットの機能ルックアップより優れています。だから、最初の方法で行く:

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

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

ちょうど私が思ったこと!確認してくれてありがとう。 – user6245072

関連する問題