2016-03-15 103 views
-1

试图向Ruby Array类添加一个方法,该方法接受带有两个参数的代码块。对于数组中相同项目的每次下一次运行,它会调用一次代码块,发送运行的长度和重复的项目。并且不重复的项目将是长度为1的运行,单个项目重复一次。输出:将方法添加到Ruby数组类

irb(main):001:0> [4,4,5,6,7,7].every_run {|ct,v| print v, "[", ct, "]\n" } 
4[2] 
5[1] 
6[1] 
7[2] 
=> nil 
+2

如何基于一种方法['可枚举#chunk'] (http://ruby-doc.org/core-2.3.0/Enumerable.html#method-i-chunk)?我想尝试,但缺少时间:-( –

+0

请编辑您的问题以包含您所写的代码。如果您没有向我们展示如何修改您的代码,真的很难告诉您。 –

+0

@Aspersum if数组就像'[4,4,5,6,7,7,4]'那么你期望的是什么或者'4'的运行时长是多少? –

回答

2
class Array 
    def every_run 
    chunk(&:itself).map { |n,arr| yield(arr.size,n) } 
    end 
end 

[4,4,5,6,7,7].every_run {|ct,v| print v, "[", ct, "]\n" } 
4[2] 
5[1] 
6[1] 
7[2] 

此前v2.2中,你将不得不使用

chunk { |e| e } 

代替chunk(&:itself)