我想比较三个字符串并根据哪些字符串相同采取不同的操作。
在我看来,有5种不同的结果:
- 它们都是一样的(A=B=C)
- 他们都是不同的
- 其中两个相同(A=B、B=C 或 C=A)
我正在努力编写一段高效的 Ruby 代码来给我 5 种不同的结果。比较字符串似乎是一项相当昂贵的操作,我不想重复比较相同的字符串。
此代码将在循环内运行,因此进行一些优化似乎是个好主意。这不是我的 Comp Sci 作业,这是一个现实世界的问题 :-)
[编辑] Sergio 代码的进一步优化可以提供更好的结果。我们可以将第三次字符串比较推迟到如下if...then
语句:
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