需要基于ruby中组内最小值的hashmap值

时间:2013-05-23 18:06:43

标签: ruby

这是min_by in a hashmap within a group of values in ruby的后续问题。

我有一个如下的hashmap

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

我需要每个键值对中的第三个值的最小数量,以及找到最小值的数组的第二个值。 我试过了

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

但它无效

2 个答案:

答案 0 :(得分:3)

h = {1=>[:a, :b, 3], 2=>[:a, :c, 5], 3=>[:a, :d, 1], 4=>[:a, :e, 4], 5=>[:f, :g, 2]}
h.min_by { |k, v| v[2] }[1][1..2]
# => [:d, 1]

# Only values having :a as first element
h.select{ |k,v| :a == v[0] }.min_by { |k, v| v[2] }[1][1..2]
# => [:d, 1]

如果您只想[1..2]而不是[1],请在两个示例中将:d更改为[:d, 1]

答案 1 :(得分:1)

h = {1=>['a', 'b', 3], 2=>['a', 'c', 5], 3=>['a','d', 1], 4=>['a', 'e', 4], 5=>['f', 'g', 2]} 
h.select {|k,v| v[0] == 'a' }.min_by{|k,v| v.last}.last[-2..-1]