2013-03-04 19 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