2011-09-27 17 views
7

En una aplicación de rieles, tengo una serie de valores hash que puedo ordenar fácilmente con sóloRubí: array tipo de hash, a pesar de clave puede no existir

array_of_hashes.sort_by { |hash| hash[:key_to_sort] } 

Pero ¿y si no cada miembro de la matriz tiene una clave :key_to_sort? Entonces el ordenamiento fallará "la comparación de String con nil failed". ¿Hay alguna manera de permitir que el género continúe? ¿O hay otra manera de hacer esto?

Respuesta

11

Depende de lo que quiera hacer cuando un hash no tiene una clave de clasificación. Puedo imaginar dos escenarios:

1) No incluir el hash de la clasificación

arr.delete_if { |h| h[:key_to_sort].nil? }.sort_by { |h| h[:key_to_sort] } 

2) colocar el hash al comienzo/final de la matriz:

arr.sort_by { |h| h[:key_to_sort] || REALLY_SMALL_OR_LARGE_VALUE } 
+0

** Niza **. Mover el hash al principio/final en tal caso es lo que estaba pensando, simplemente no sabía cómo hacerlo. En el caso de alfabético, acabo de usar ''A' 'para poner los valores faltantes arriba. –

+0

Ah, y +1 para describir la opción de excluir el hash. –

+2

Me alegro de poder ayudar. En mi humilde opinión, sería mejor usar "" (una cadena vacía) que "A" para un pequeño valor de cadena. –

Cuestiones relacionadas