3 つの文字列を比較し、どれが同じかによって異なるアクションを実行したいと考えています。
私には5つの異なる結果があるようです:
- それらはすべて同じです (A=B=C)
- それらはすべて異なっています
- そのうちの 2 つが同じ (A=B、B=C、または C=A)
5 つの異なる結果を得るために効率的な Ruby コードを書くのに苦労しています。文字列の比較は非常に高価な操作のようで、同じ文字列を繰り返し比較したくありません。
このコードはループ内で実行されるため、最適化を行うことをお勧めします。これは私の Comp Sci の宿題ではなく、現実の問題です :-)
[編集] Sergio のコードをさらに最適化すると、さらに良い結果が得られます。if...then
次のようなステートメントまで、3 番目の文字列比較を延期できます。
def compare a, b, c
ab = a == b
ac = a == c
if ab && ac
1
elsif ab
2
elsif ac
3
elsif b == c
4
else
5
end
end
[編集] Sergiosのコードの私のバージョンを含む、今日与えられたソリューションのベンチマーク:
user system total real
sawa1: 0.620000 0.000000 0.620000 ( 0.625677)
izomorphius: 0.030000 0.000000 0.030000 ( 0.025314)
sergio1: 0.020000 0.000000 0.020000 ( 0.018039)
sergio2: 0.030000 0.000000 0.030000 ( 0.030210)
dominic: 0.010000 0.000000 0.010000 ( 0.015450)
1024 文字の文字列をそれぞれ 10,000 回比較し、結果を 1 ~ 5 の範囲の数値に減らして、5 つの考えられる結果のそれぞれに対して異なるアクションを実行するという元の要件を表しました。
[編集] ベンチマーク コードはこちらhttps://gist.github.com/3871698