Me pregunto si hay una manera más canónica de hacer esto en Ruby 1.9Hash edificio mediante la agrupación de matriz de objetos basado en una propiedad de los objetos
tengo una matriz con un montón de objetos y quiero para agruparlos en una Hash usando una propiedad de cada objeto en la matriz.
Muy ejemplo simplificado:
> 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"]}
He intentado esto, pero su producción está mal (como se puede ver):
sh = Hash.new([])
=> {}
> aers.each do |aer|
> sh[aer.size] << aer
> end
=> ["a", "b", "c", "d", "ab", "bc", "de", "abc"]
> sh
=> {}
Y la razón de su código no está funcionando como se esperaba se explica aquí: http://stackoverflow.com/questions/2698460/strange-ruby-behavior-when-using -hash-new y aquí: http://stackoverflow.com/questions/2552579/ruby-method-array-not-updating-the-array-in-hash (un error bastante común en Ruby). –