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

标签 ruby arrays

我正在寻找 Ruby Core 中的数组等效 String#split,但惊讶地发现它不存在。是否有比以下更优雅的方法来根据值将数组拆分为子数组?

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]]

编辑:对于那些感兴趣的人,可以在 this answer 中看到引发此请求的“现实世界”问题。 ,我在下面使用@fd 的答案来实现。

最佳答案

有时 partition是做这样的事情的好方法:

(1..6).partition { |v| v.even? } 
#=> [[2, 4, 6], [1, 3, 5]]

关于ruby - 根据值将数组拆分为子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4800337/

相关文章:

ruby - 动态添加 ActiveRecord 范围

ruby-on-rails - 从 Ruby on Rails Controller 本地保存呈现的静态 html、css、javascript 文件

java - 我什么时候应该使用哈希而不是类

arrays - Delphi 中比较数组

php - 按字母顺序对具有相同值的键进行排序

ruby-on-rails - `materialize' : Could not find

ruby 什么时候出现特征类

c - 是否可以使用泛型函数将数组复制到 C 中另一个数组的不同类型

c++ - 使用 for 循环加载数组

Java - 通过方法重新引用数组