相关疑难解决方法(0)

根据值将数组拆分为子数组

String#split在Ruby Core中寻找一个等效的数组,并且惊讶地发现它不存在.是否有比以下更优雅的方法将数组拆分为基于值的子数组?

class Array
  def split( split_on=nil )
    inject([[]]) do |a,v|
      a.tap{
        if block_given? ? yield(v) : v==split_on
          a << []
        else
          a.last << v
        end
      }
    end.tap{ |a| a.pop if a.last.empty? }
  end
end

p (1..9 ).to_a.split{ |i| i%3==0 },
  (1..10).to_a.split{ |i| i%3==0 }
#=> [[1, 2], [4, 5], [7, 8]]
#=> [[1, 2], [4, 5], [7, 8], [10]]
Run Code Online (Sandbox Code Playgroud)

编辑:对于那些感兴趣的人,可以在这个答案中看到引发这个请求的"真实世界"问题,我在下面用@ fd的答案来实现.

ruby arrays

20
推荐指数
3
解决办法
1万
查看次数

标签 统计

arrays ×1

ruby ×1