2012-02-16 12 views
5

次のように私は、オブジェクトを持っている:1,3,2どのようにオブジェクトの配列を並べ替えるのですか?

どのようにすることができます:

[{:id=>2, :fname=>"Ron", :lname=>"XXXXX", :photo=>"XXX"}, {:id=>3, :fname=>"Dain", :lname=>"XXXX", :photo=>"XXXXXXX"}, {:id=>1, :fname=>"Bob", :lname=>"XXXXXX", :photo=>"XXXX"}] 

は、私はそれが

IDにつながるので、小文字を区別しないfnameは、アルファベット順にケースによってこれをソートしたいですこれを並べ替える?私は試している:

@people.sort! { |x,y| y[:fname] <=> x[:fname] } 

しかし、それは効果がありません。

+2

これはJSONオブジェクトではありません。それはハッシュのRuby配列です。 – Phrogz

答えて

13

sort_byを使用できます。

@people.sort_by! { |x| x[:fname].downcase } 

(downcaseはケース非感受性のためのものである)

完全ために、提供されたコードの問題は、次のとおり

  • 引数が間違った順序で
  • downcaseではないです

次のコードはsortメソッドを使用して動作します。

@people.sort_by {|x| x[:fname].downcase} == @people.sort { |x,y| x[:fname].downcase <=> y[:fname].downcase } 

戻り:これらのメソッドの両方が同じことを行うことを証拠として

@people.sort! { |x,y| x[:fname].downcase <=> y[:fname].downcase } 

関連する問題