5

これは簡単だと思いますし、これをかなり一生懸命探しましたが、うまくいかないようです。

私は次のハッシュを持っています:

@friends = [{"name"=>"John Smith", "id"=>"12345"}, {"name"=>"Jane Doe", "id"=>"23456"}, {"name"=>"Samuel Jackson", "id"=>"34567"}, {"name"=>"Kate Upton", "id"=>"45678"}]

名前のアルファベット順に並べ替えようとしています。

今私はこれをやっています:

@friends.sort{|a,b| a[0]<=>b[0]}

ただし、完全な結果をアルファベット以外の順序で出力するだけです。

4

2 に答える 2

12

問題は、aとbがハッシュであるため、キーまたはインデックスとして0ではなく「name」を使用する必要があることです。

@friends.sort{|a,b| a['name']<=>b['name']}

また、sortを使用することを忘れないでください!@friends変数を変更するか、結果に設定します

@friends.sort!{|a,b| a['name']<=>b['name']}

また

@friends = @friends.sort{|a,b| a['name']<=>b['name']}
于 2012-07-04T23:33:04.123 に答える
7

キーで並べ替えることは可能ですが、これを行うときは、キーが文字列であるか記号であるかに注意してください。

@friends.sort_by { |f| f['name'] }

大文字と小文字を区別しないようにする場合は、いつでも次の操作を実行できます。

@friends.sort_by { |f| f['name'].downcase }

そしてもちろん、あなたはいつでも!それを保存するために使うことができます@friends

>> @friends.sort_by! { |f| f['name'] }
>> @friends # now returns the sorted array of hashes
于 2012-07-04T23:32:50.400 に答える