我正在寻找 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/