From: google@... (Tom Payne) Date: 2002-10-18T00:27:23+09:00 Subject: Enumerable.partition Hi -- I see that Enumerable.partition has been added somewhere between 1.6.7 and 1.7.3. It's implemention is equivilent to module Enumerable def partition result = [[], [[]] each do |value| result[yield(value) ? 0 : 1].push(value) end result end end e.g. [0, 1, 2, 3].new_parition { |x| x > 1 } gives [[2, 3], [0, 1]] Please (pretty please) can this be changed to the much more powerful: module Enumerable def new_partition(default = nil) result = Hash.new(default) each do |value| key = yield(value) if result.has_key?(key) result[key].push(value) else result[key] = [value] end end result end end e.g. [0, 1, 2, 3].new_partition { |x| x > 1 } gives {false=>[0, 1], true=>[2, 3]} Hopefully this won't break too much code in 1.7.3. It's very useful: [-2, -1, 0, 1, 2].new_partition { |x| x <=> 0 } # => {0=>[0], 1=>[1, 2], -1=>[-2, -1]} The ability to override the hash default is helpful: a = [0, 1, 2] h = a.partition([]) { |x| x <=> 0 } # => {0=>[0], 1=>[1, 2]} puts("there are #{h[-1].size} negative numbers in a") Thanks, Tom