2012-07-20 57 views
0

我在排序ruby中的多維數組時遇到問題,無法找到類似於我的問題的任何問題。我有一個數組/散列或兩者? (原諒我作爲即時通訊從C/PHP/Java的背景來了,這是用Ruby我第一次)用ruby排序多維數組

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

我想根據年齡的用戶數組進行排序。

回答

4

你需要散列哈希值和ruby 1.9.2來對已分類散列值IIRC進行哈希。這個渾身Sort hash by key, return hash in 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]} 
+0

我得到這個錯誤:'sort_by ':未定義的方法'<=>' 爲#<哈希:0x7f0577f16480>(NoMethodError) – shapeshifter 2012-07-20 06:33:51

+0

@shapeshifter當我在IRB測試他的榜樣它的工作。就像DGM所說的,你必須擁有Ruby 1.9.2或更高版本。 – KChaloux 2012-07-20 12:41:25

+0

這是我的問題。抱歉,新的紅寶石沒有意識到Centos會是後面的幾個版本。應該知道!乾杯。 – shapeshifter 2012-07-23 02:33:44

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