class Array
def split(value = nil, &block)
[1, 2, 3, 4, 5].split(3) # => [[1, 2], [4, 5]]
or the result of an optional block.
Divides the array into one or more subarrays based on a delimiting +value+
def split(value = nil, &block) inject([[]]) do |results, element| if block && block.call(element) || value == element results << [] else results.last << element end results end end