From: Erik Veenstra Date: 2008-09-09T17:43:10+09:00 Subject: Re: Is this a sensible implementation for Array#group_by ? Indeed, Facets does have an Enumerable#group_by. And it has an Enumerable#cluster_by as well. And the latter is the one you're looking for, because you want an Array and not a Hash. Group_by uses each, because it's faster than inject. gegroet, Erik V. - http://www.erikveen.dds.nl/ ---------------------------------------------------------------- module Enumerable def group_by res = {} each{|e| (res[yield(e)] ||= []) << e} res end def cluster_by(&block) #group_by(&block).values # In case of unsortable keys. group_by(&block).sort.transpose.pop || [] end end ---------------------------------------------------------------- a = %w(apple banana pear plum nectarine orange melon) a.group_by{|e| e.length} # ==> {5=>["apple", "melon"], 6=>["banana", "orange"], 9=>["nectarine"], 4=>["pear", "plum"]} a.cluster_by{|e| e.length} # ==> [["pear", "plum"], ["apple", "melon"], ["banana", "orange"], ["nectarine"]] ----------------------------------------------------------------