Tengo una matriz de objetos en Ruby on Rails. Quiero ordenar la matriz por un atributo del objeto. ¿Es posible?¿Ordenar una matriz de objetos en Ruby por atributo de objeto?
Respuesta
Sí, utilizando Array#sort!
esto es fácil.
myarray.sort! { |a, b| a.attribute <=> b.attribute }
Matriz # tipo funciona bien, tal como fue anunciado anteriormente:
myarray.sort! { |a, b| a.attribute <=> b.attribute }
PERO, es necesario asegurarse de que el operador <=>
se implementa para ese atributo. Si se trata de un tipo de datos nativo de Ruby, esto no es un problema. De lo contrario, escriba su propia implementación que devuelva -1 si es < b, 0 si son iguales, y 1 si a> b.
recomiendo el uso de sort_by lugar:
objects.sort_by {|obj| obj.attribute}
Especialmente si el atributo se puede calcular.
O la versión abreviada: 'objects.sort_by (&: attribute)' – Nikola
objetos aún más cortos objects.sort_by &: attribute –
Si tiene problemas con las letras mayúsculas y minúsculas que se ordenan por separado, puede usar 'objects.sort_by {| obj | obj.attribute.downcase} ' – campeterson
en caso de que necesite la clasificación por dos atributos, donde primero es más importante que el segundo (medios teniendo en cuenta segunda argumentos sólo si primeros argumentos son iguales), entonces es posible hacer como esto
myarray.sort{ |a,b| (a.attr1 == b.attr1) ? a.attr2 <=> b.attr2 : a.attr1 <=> b.attr1 }
o en el caso de la matriz de matrices
myarray.sort{ |a,b| (a[0] == b[0]) ? a[1] <=> b[1] : a[0] <=> b[0] }
Hmmm ¡GRACIAS! – MrYoshiji
Usted puede hacer cualquier clase clasificable reemplazando el método < =>:
class Person
attr_accessor :first_name, :last_name
def initialize(first_name, last_name)
@first_name = first_name
@last_name = last_name
end
def <=>(per)
@last_name + @first_name <=> per.last_name + per.first_name
end
end
Ahora una matriz de objetos Person se podrá ordenar en last_name.
ar = [Person.new("Eric", "Cunningham"), Person.new("Homer", "Allen")]
puts ar # => [ "Eric Cunningham", "Homer Allen"] (Person objects!)
ar.sort!
puts ar # => [ "Homer Allen", "Eric Cunningham" ]
@model_name.sort! { |a,b| a.attribute <=> b.attribute }
Hay muchas respuestas idénticas publicadas en 2009. No es necesario agregar otra. – interjay
No utilice 'sort' cuando esté ordenando objetos que no se pueden comparar directamente. Si tiene que acceder a los atributos o hacer un cálculo para obtener el valor para comparar use 'sort_by'. Será mucho más rápido. –
orden ascendente:
objects_array.sort! { |a, b| a.attribute <=> b.attribute }
o
objects_array.sort_by{ |obj| obj.attribute }
descendente orden:
objects_array.sort! { |a, b| b.attribute <=> a.attribute }
o
objects_array.sort_by{ |obj| obj.attribute }.reverse
más elegante objects.sort_by(&:attribute)
, se puede añadir un oon .reverse
si necesita cambiar el orden.
- 1. Uniq por atributo de objeto en Ruby
- 2. ¿Cómo ordenar una matriz de objetos por un atributo de los objetos?
- 3. Mongodb: ordenar documentos por objetos de matriz
- 4. ordenando una matriz de objetos ruby por un atributo que podría ser nulo
- 5. rieles de filtrado matriz de objetos por valor de atributo
- 6. Clasificación Java: ordenar una matriz de objetos por propiedad, no se permite el objeto Comparable
- 7. Rails, Ruby, cómo ordenar una matriz?
- 8. PHP Función de clasificación para ordenar una matriz de objetos
- 9. Ordenar una matriz de objetos en ActionScript 3
- 10. Ruby ordenar por valores múltiples?
- 11. ¿Cómo ordenar diccionarios de objetos por valor de atributo en python?
- 12. Ordenar NSMutableArray Por propiedad del objeto
- 13. Ordenar una lista heterogénea de objetos en Python
- 14. Ordenado una matriz de objetos javascript por una propiedad de objeto
- 15. Ordenación de una matriz de una matriz de objetos en PHP por valor de clave
- 16. Cómo ordenar un atributo de un objeto utilizando Colecciones
- 17. Imprimir una matriz de matrices en una línea en la consola (una línea por objeto matriz principal) en Ruby
- 18. Cómo ordenar colección por atributo created_at
- 19. ¿Cómo ordenar una matriz en Ruby en un orden particular?
- 20. ordenar por matriz numérica()
- 21. Ordenar un array de objetos
- 22. Atributo de matriz para Ruby Modelo
- 23. Ordenar una colección de objetos
- 24. Ordenar Objeto en PHP
- 25. Ordenar una matriz por claves basadas en otra matriz?
- 26. ¿Cómo ordenar aleatoriamente (codificar) una matriz en Ruby?
- 27. Javascript en IE8: cómo ordenar una matriz de objetos por propiedad alfanumérica
- 28. cómo seleccionar un objeto de una lista de objetos por su atributo en python
- 29. Numpy: ordenar una matriz multidimensional por una matriz multidimensional
- 30. Crear una matriz de archivos y ordenar por fecha en ruby
Thnx buddy pero no funcionó para mí tengo una matriz de objetos. En cuál de los atributos del objeto se crea_at. Quiero ordenarlo con este campo. así que lo hice @ comm_bytes.sort! {| a, b | a.created_at <=> b.created_at} pero no hubo suerte para mí ¿puedes ayudar ... ?? –
¿Hay un método created_at para acceder al atributo @created_at? ¿Qué tipo de objeto es @created_at? ¿Define '<=>'? ¿Qué tipo de errores estás recibiendo? etc, etc., ad nauseum. En otras palabras, necesitamos más detalles que "pero sin suerte para mí". – rampion
funciona si lo haces myarray = myarray.sort {...} sin "!" – DoruChidean