2013-08-26 18 views
5

配列をアルファベット順に並べ替えるにはどうすればいいですか?私はアルファベット順に並べ替え

sort_by(&:field_name) 

を試してみましたしかし、それは大文字の順で私に配列を与えると、その後order.Iが

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

を試してみました下部ケースは、この問題を解決する方法はありますか?

+2

あなたのサンプル列を貼り付けてください。 –

+0

サンプル配列[ジョン、アリス、ジョセフ、アンナ、ジルハン]私は結果を[アリス、アンナ、ジョン、ジョセフ、ジルハン]のようにしたい。 – nisha

答えて

10

最初の並べ替えのように、その後のすべての文字列をdowncaseとすべきである:

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

あなたはちょうど間違いを犯した。並び替え!配列オブジェクト自体をソートします。 –

+0

はい、私はそれが要件に依存していることを知っています、あなたも使用することがあります:new_array = array.sort_by {| e | e.downcase}となりますが、古い配列では別のオブジェクトを作成する必要があります。 –

0

は注意してください - 名前は特殊文字を含めることができます。これらは最後までソートされます。

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

これをカバーするには、使用することができます...

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