min_by在ruby中的一组值内的hashmap中

时间:2013-05-23 00:57:41

标签: ruby

我有以下形式的散列图:

{1=>[a, b, 3], 2=>[a, c, 5], 3=>[a, d, 1], 4=>[a, e, 4], 5=>[f, g, 2]}...

我需要每个键值对中第三个值的最小数量,但是在相同第一个值的组中。例如,在上面的hashmap中,有四个键值对,第一个值为'a',我需要检索第一个值为'a'的第三个值的最小值,即1

我尝试了hash.min_by{|k, v|, v[2]},显然它在地图上给了我最小值。我是如何得到'a'组的最小值?

3 个答案:

答案 0 :(得分:2)

hash.values.select {|a| a[0] == 'a'}.map {|a| a[2]}.min

答案 1 :(得分:1)

如果您想要使用所有分组的映射:

hash.values.each_with_object(Hash.new) do |(group_by, _, v), min_map|
  current_min = min_man[group_by] ||= v  
  min_map[group_by] = v if v < current_min  
end

答案 2 :(得分:0)

h = {1=>['a', 'b', 3], 2=>['a', 'c', 5], 3=>['a','d', 1], 4=>['a', 'e', 4], 5=>['f', 'g', 2]} #=>1
h.map{|k,v| v.last if v[0] == 'a' }.compact.min #=>1