如何在这个哈希上使用`group_by`

时间:2013-03-04 08:47:19

标签: ruby arrays hash 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

但我仍然无法弄清楚如何访问这些数据。我非常感谢你的建议。

1 个答案:

答案 0 :(得分: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