Я интересно, если есть более канонический способ сделать это в рубин 1,9Строительство Hash, группируя массив объектов, основанный на свойстве предметов
У меня есть массив с кучей объектов, и я хочу сгруппировать их в хэш, используя свойство каждого объекта в массиве.
Очень упрощенный пример:
> 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
=> {}
И причина ваш код не работает, как ожидается, будет объяснено здесь: http://stackoverflow.com/questions/2698460/strange-ruby-behavior-when-using -hash-new и здесь: http://stackoverflow.com/questions/2552579/ruby-method-array-not-updating-the-array-in-hash (довольно распространенная ошибка в Ruby). –