使用ruby识别阵列上的运行

Arn*_*jar 5 ruby pattern-matching

如果我们有一个数组

array = [1, 1, 0, 0, 2, 3, 0, 0, 0, 3, 3, 3 ]
Run Code Online (Sandbox Code Playgroud)

我们如何识别给定数字的运行(具有相同值的连续数量)?举例:

run_pattern_for(array, 0) -> 2
run_pattern_for(array, 3) -> 1
run_pattern_for(array, 1) -> 1
run_pattern_for(array, 2) -> 0
Run Code Online (Sandbox Code Playgroud)

没有2的运行,因为没有两个连续的显示.有一次运行3,因为只有一个将树作为连续数字显示.

Bro*_*tse 11

尝试:

class Array
  def count_runs(element)
    chunk {|n| n}.count {|a,b| a == element && b.length > 1}
  end
end

a = [1, 1, 0, 0, 2, 3, 0, 0, 0, 3, 3, 3 ]
a.count_runs 0   #=> 2
a.count_runs 3   #=> 1
a.count_runs 1   #=> 1
a.count_runs 2   #=> 0
Run Code Online (Sandbox Code Playgroud)

  • 哇,非常好的回答,我从来不知道块功能 (2认同)