For all you FPers out there - is this a defined function in any
language's standard library? And if so, what is it called?
module Enumerable
def collect_by
h = {}
each {|i|
j = yield i
(h[j] ||= []) << i
}
h
# or, as a one-liner
# inject({}) {|c, e| (c[yield e] ||= []) << e; c}
end
end
a = [1,2,3,4,5,6,7,8,9,10]
p a.collect_by {|i| i % 2} #=> {0=>[2, 4, 6, 8, 10], 1=>[1, 3, 5, 7, 9]}
martin