2013-03-04 21 views
0

我有這個散列:如何使用`group_by`對這個散列

@hash = [ 
    {0=>"1", 1=>"A1", 2=>"something", 3=>"10"}, 
    {0=>"2", 1=>"A1", 2=>"something", 3=>"8"}, 
    {0=>"3", 1=>"A2", 2=>"something", 3=>"3"}, 
    {0=>"4", 1=>"A2", 2=>"something", 3=>"13"} 
] 

我需要group_by在第一列(A1,A2)的值,然後與數據的工作(例如挑選出對於A1和A2具有索引3的項目的最低值)。

@hash.each do |item| 
    item.each do |item2| 
    item2.group_by{ |i| i[1] }.each do |p| 
     puts p 
    end 
    end 
end 

但我仍然無法弄清楚如何訪問這些數據。我會非常感謝您的建議。

回答

0

嘗試以下

>> grouped = @hash.group_by { |h| h[1] } 
>> grouped['A1'] # [{0=>"1", 1=>"A1", 2=>"something", 3=>"10"}, {0=>"2", 1=>"A1", 2=>"something", 3=>"8"}] 
>> grouped['A2'] # [{0=>"3", 1=>"A2", 2=>"something", 3=>"3"}, {0=>"4", 1=>"A2", 2=>"something", 3=>"13"}] 

獲得最大或最小值,嘗試

>> grouped['A1'].max_by { |h| h[3].to_i }[3] # 10 
>> grouped['A1'].min_by { |h| h[3].to_i }[3] # 8 
+0

可以downvoter解釋爲什麼這是downvoted? – jvnill 2013-03-04 09:07:39

+0

我不明白。這個答案幫助了我'jvnill',謝謝!標記爲已接受! – user984621 2013-03-04 09:44:10

+0

+1在分組之前,我會變換'@ hash'(所以所有的字符串都被轉換爲整數),但無論如何這是要走的路。 – tokland 2013-03-04 10:15:29