如何检查数组是否包含3个连续的重复项?

时间:2017-08-09 10:09:32

标签: ruby

如果input(n)连续包含3个重复项,我试图返回true,否则返回false。

我的代码:

def got_three?(n)
  n.each_cons(3) { |a, b, c| a == b && b == c ? true : false }
end

这是一个错误,我不确定为什么。有什么帮助吗?

2 个答案:

答案 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倍以上。快乐的编码:)