2013-08-26 16 views
5

Come ordinare un array in binari (in ordine alfabetico). Ho provatoOrdina alfabeticamente nei binari

sort_by(&:field_name) 

Ma che mi dà array con ordine lettera maiuscola e poi caso inferiore order.i cercato

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

C'è un modo per risolvere questo problema?

+2

si prega di incollare la matrice del campione. –

+0

esempio di matrice [john, Alice, Joseph, anna, Zilhan] voglio il risultato come [Alice, anna, john, Joseph, Zilhan] – nisha

risposta

10

si deve prima downcase ogni corda e quindi ordinare come:

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

hai appena commesso un errore. ordina per! ordinerà l'oggetto stesso dell'array. –

+0

Sì, lo so, dipende dal requisito, puoi anche usare: new_array = array.sort_by {| e | e.downcase}, ma solo se il vecchio array richiedesse ulteriormente altrimenti sarebbe inutile creare un altro oggetto. –

0

essere consapevoli - nomi possono contenere caratteri speciali. Questi saranno ordinati fino alla fine.

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

Per coprire questo, è possibile utilizzare ...

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