2013-08-26 15 views
5

Jak sortować tablicę w szynach (kolejność alfabetyczna). PróbowałemSortowanie alfabetycznie w szynach

sort_by(&:field_name) 

Ale to daje mi tablicę z rzędu duża litera, a następnie małe litery order.i próbował

array.sort! { |x,y| x.field_name.downcase <=> y.field_name.downcase } 

Czy istnieje jakiś sposób, aby rozwiązać ten problem?

+2

proszę wkleić tablicę próbek. –

+0

tablica próbek [john, Alice, Joseph, anna, Zilhan] chcę, aby wynik jako [Alice, anna, john, Joseph, Zilhan] – nisha

Odpowiedz

10

Należy najpierw downcase każdy ciąg, a następnie rodzaj jak:

array = ["john", "Alice", "Joseph", "anna", "Zilhan"] 
array.sort_by!{ |e| e.downcase } 
=> ["Alice", "anna", "john", "Joseph", "Zilhan"] 
+0

właśnie się pomyliłeś. Sortuj według! posortuje sam obiekt tablicy. –

+0

Tak, wiem, że to zależy od wymagań, możesz również użyć: new_array = array.sort_by {| e | e.downcase}, ale tylko wtedy, gdy stara tablica wymagała więcej, w przeciwnym razie jest bezużyteczna do utworzenia innego obiektu. –

0

Bądź świadomy - nazwy mogą zawierać znaków specjalnych. Zostaną one posortowane do końca.

>> ["Ägidius", "john", "Alice", "Zilhan"].sort_by!{ |e| e.downcase } 
=> ["Alice", "john", "Zilhan", "Ägidius"] 

Aby to pokrycie, można użyć ...

>> ["Ägidius", "john", "Alice", "Zilhan"].sort_by!{ |e| ActiveSupport::Inflector.transliterate(e.downcase) } 
=> ["Ägidius", "Alice", "john", "Zilhan"] 
Powiązane problemy