0

ルビーで多次元配列をソートするのに問題があり、私の問題に似た質問を見つけることができません。配列/ハッシュまたはその両方がありますか?(ac / php / javaのバックグラウンドから来ているので失礼します。Rubyを使用するのはこれが初めてです)

user['shapeshifter'] = {age => '25', country => 'Australia'}
user['user2'] = {age => '29', country => 'Australia'}
user['user3'] = {age => '21', country => 'Russia'}

年齢に基づいてユーザー配列を並べ替えたい。

4

2 に答える 2

4

ハッシュのハッシュと、ソートされたハッシュの場合はruby 1.9.2、IIRCが必要です。これは、キーでハッシュをソートし、Rubyでハッシュを返すでカバーされていました

テストケースを想定して、有効になるように修正しました。

user = {}
user['shapeshifter'] = {:age => 25, :country => 'Australia'}
user['user2'] = {:age => 29, :country => 'Australia'}
user['user3'] = {:age => 21, :country => 'Russia'}

必要なのは:

user.sort_by {|key,value| value[:age]}
于 2012-07-20T03:22:44.607 に答える
1

現在、ruby 1.9はハッシュを順序付けていますが、並べ替え機能はまだ存在しません。

配列のペアを並べ替えて、新しいハッシュを作成してみてください。このような

user = {}
user['shapeshifter'] = {:age => '25', :country => 'Australia'}
user['user2'] = {:age => '29', :country => 'Australia'}
user['user3'] = {:age => '21', :country => 'Russia'}

result1 = user.sort { |user1, user2|
  user1[1][:key] <=> user2[1][:key] # user1,2 = [key, value] from hash
}
puts Hash[result1].inspect

or this

result2 = user.sort_by { |user_key, user_val|
  user_val[:key]
}
puts Hash[result2].inspect
于 2012-07-20T03:48:55.520 に答える