2011-09-27 13 views
7

W aplikacji Rails, mam tablicę skrótów, które mogę porządek łatwo z tylkoRuby: tablica rodzaju skrótów, mimo że klucz może nie istnieć

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

Ale co, jeśli nie każdy członek tablica ma klucz :key_to_sort? Wtedy sortowanie nie powiedzie się "porównanie łańcucha znaków z nieudaną próbą". Czy istnieje sposób na kontynuowanie sortowania? Czy jest inny sposób na zrobienie tego?

Odpowiedz

11

Zależy od tego, co chcesz zrobić, gdy hasz nie ma klucza sortującego. Mogę sobie wyobrazić dwa scenariusze:

1) wykluczają skrót od sortowania

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

2) umieścić skrót na początku/końca tablicy:

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

** Nicea **. Przeniesienie hasha na początek/koniec w takim przypadku jest tym, o czym myślałem, po prostu nie wiedziałem, jak to zrobić. W przypadku alfabetu użyłem po prostu "A", aby umieścić brakujące wartości na górze. –

+0

Oh, i +1 za opis opcji wykluczania hasha. –

+2

Cieszę się, że mogę pomóc. IMHO byłoby lepiej użyć "" (pusty ciąg) niż "A" dla małej wartości ciągu. –

Powiązane problemy