2011-09-27 7 views
7

In un'applicazione rotaie, ho un array di hash che posso sorta facilmente con solorubino: sorta array di hash, anche se chiave non può esistere

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

Ma se non tutti i membri di matrice ha una chiave :key_to_sort? Quindi l'ordinamento fallirà "confronto di String with nil failed". C'è un modo per consentire che l'ordinamento continui? O c'è un altro modo per farlo?

risposta

11

Dipende da cosa si vuole fare quando un hash non ha la chiave di ordinamento. Posso immaginare due scenari:

1) escludere l'hash dallo smistamento

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

2) posizionare il cancelletto ad inizio/fine dell'array:

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

** ** Nizza. Spostare l'hash all'inizio/fine in questo caso è ciò che stavo pensando, semplicemente non sapevo come farlo. Nel caso di alfabetico, ho usato ''A'' per mettere i valori mancanti in cima. –

+0

Oh e +1 per la descrizione dell'opzione per escludere l'hash. –

+2

Contento di aver potuto aiutare. IMHO sarebbe meglio usare "" (una stringa vuota) di "A" per un valore stringa piccolo. –

Problemi correlati