Построение хэша путем группировки массива объектов на основе свойства элементов

Мне интересно, есть ли более канонический способ сделать это в ruby ​​1.9

У меня есть массив с кучей объектов, и я хочу сгруппировать их в хеш, используя свойство каждого объект в массиве.

Очень упрощенный пример:

> sh = {}
 => {} 
> aers = %w(a b c d ab bc de abc)
 => ["a", "b", "c", "d", "ab", "bc", "de", "abc"] 
> aers.each do |aer|
>     sh[aer.size] = [] if sh[aer.size].nil?
>     sh[aer.size] << aer
>   end
=> ["a", "b", "c", "d", "ab", "bc", "de", "abc"] 
> sh
 => {1=>["a", "b", "c", "d"], 2=>["ab", "bc", "de"], 3=>["abc"]} 

Я пробовал это, но результат неверен (как вы можете видеть):

 sh = Hash.new([])
 => {} 
> aers.each do |aer|
>     sh[aer.size] << aer
>   end
 => ["a", "b", "c", "d", "ab", "bc", "de", "abc"] 
> sh
 => {} 
18
задан Phrogz 14 January 2011 в 20:14
поделиться