From: "Christopher Özbek" Date: 2002-03-26T03:19:19+09:00 Subject: How to split an Array efficiently? + non-inplace Delete_if Hi, I want to split an array depending on the evaluation of a code-block, like this a, b = [1,7,10,3,12].split do |x| x < 10 end # a = [1,7,3] # b = [10,12] I haven't found a function like this (Ruby 1.6.6). Have I missed it? When trying to implement it, I also found, that there is no Delete_if (it exists, but does what Delete_if! should be doing). I came up with the following, can anybody help me, which implementation to use (performance?): def split1(aArray) a = aArray.dup.delete_if do |x| not yield x end aArray.delete_if do |x| yield x end [a, aArray] end def split2(aArray) a = aArray.dup.delete_if do |x| not yield x end [a, aArray - a] end def split3(aArray) a = [] b = [] aArray.each do |x| if yield x then a.push x else b.push x end end [a, b] end [method(:split1), method(:split2), method(:split3)].each do |split| a,b = split.call([1,7,10,3,12]) do |x| x < 10 end p split puts "Here goes a: #{a.inspect}" puts "Here goes b: #{b.inspect}" end