2012-02-16 14 views
5

que tienen un objeto de la siguiente manera:¿Cómo se ordena una matriz de objetos?

[{:id=>2, :fname=>"Ron", :lname=>"XXXXX", :photo=>"XXX"}, {:id=>3, :fname=>"Dain", :lname=>"XXXX", :photo=>"XXXXXXX"}, {:id=>1, :fname=>"Bob", :lname=>"XXXXXX", :photo=>"XXXX"}] 

Quiero resolver esto por fnombre, alfabéticamente entre mayúsculas y minúsculas por lo que resultaría en

Identificación: 1,3,2

¿Cómo puedo ordenar esto? Lo estoy intentando:

@people.sort! { |x,y| y[:fname] <=> x[:fname] } 

Pero eso no tiene ningún efecto.

+2

Eso no es un objeto JSON. Esa es una matriz de hashes Ruby. – Phrogz

Respuesta

13

Puede usar sort_by.

@people.sort_by! { |x| x[:fname].downcase } 

(el downcase es para el caso de insensibilidad)

Para completar, los problemas con el código proporcionado son:

  • los argumentos están en el orden equivocado
  • downcase no es se llama

El siguiente código funciona utilizando el método de ordenación.

@people.sort! { |x,y| x[:fname].downcase <=> y[:fname].downcase } 

Como prueba de que ambos de estos métodos hacen lo mismo:

@people.sort_by {|x| x[:fname].downcase} == @people.sort { |x,y| x[:fname].downcase <=> y[:fname].downcase } 

devoluciones cierto.

Cuestiones relacionadas