如何在具有最小值的哈希中找到键和值,仅在某些键中?

时间:2017-07-14 20:22:11

标签: ruby hash key min

使用Ruby 2.4。我有一个哈希,键和值都是数字(整数)。给定一组键,如何找到具有最低值的条目(键和值)?如果我想找到我能做的最小值

{{1}}

但这只能获得价值,而不是关键和价值。另请注意,哈希值中的值不一定是唯一的。

4 个答案:

答案 0 :(得分:1)

您可以映射所选的键sel_keys

hash = {1 => 2, 3 => 1, 4 => 5, 5 => 1} 
sel_keys = [3, 4] 
sel_keys.map { |k| [k,hash[k]] }.min_by(&:last) #=> [3, 1]

警告:这只返回找到最小值的第一个键。

答案 1 :(得分:1)

这是你正在寻找的吗?

它获取具有最小值的所有键。为清楚起见,我已拆分并命名了许多中间对象:

hash = { 4 => 5, 2 => 9, 3 => 1, 8 => 5 }
selected = Set[2, 4, 8]

hash_subset = hash.slice(*selected)
keys_by_value = hash_subset.group_by(&:last).each_value { |group| group.map!(&:first) }

min_value, keys_with_min_val = keys_by_value.min_by(&:first)
# => [5, [4, 8]]

和强制性红宝石oneliner:

hash.slice(*selected).group_by(&:pop).each_value(&:flatten!).min_by(&:first)

答案 2 :(得分:0)

您可以按值对哈希进行排序,然后获取第一个元素

my_hash.select{|k, _| my_selected_keys.include?(k) }.sort_by{|_, v| v}.first

答案 3 :(得分:0)

这是另一种解决方案

hash.reduce([nil, Float::INFINITY]) { |acc, pair| acc[1] < pair[1] ? acc : pair }