如果input(n)连续包含3个重复项,我试图返回true,否则返回false。
我的代码:
def got_three?(n)
n.each_cons(3) { |a, b, c| a == b && b == c ? true : false }
end
这是一个错误,我不确定为什么。有什么帮助吗?
答案 0 :(得分:4)
试试这个
n.each_cons(3).any? { |a, b, c| a == b && b == c }
答案 1 :(得分:0)
无需链接方法,只需将Enumerable#each_cons
与块一起使用:
array.each_cons(3) { |f, s, t| break true if f == t && s == t}
如果数组连续包含3个重复项,则返回true
,否则nil
(如果您需要!!
或true
,则简单使用false
。
基准:
require 'benchmark'
array = (0..1000).to_a.push(*[3, 3, 3])
Benchmark.bmbm(20) do |x|
x.report(:chain) do
array.each_cons(3).any? { |a, b, c| a == b && b == c }
end
x.report(:one_block) do
array.each_cons(3) { |f, s, t| break true if f == t && s == t}
end
end
结果:
user system total real
chain 0.000000 0.000000 0.000000 ( 0.000167)
one_block 0.000000 0.000000 0.000000 ( 0.000101)
如您所见,此解决方案的速度提高了1.6倍以上。快乐的编码:)