使用Ruby 2.4。我有一个哈希,键和值都是数字(整数)。给定一组键,如何找到具有最低值的条目(键和值)?如果我想找到我能做的最小值
{{1}}
但这只能获得价值,而不是关键和价值。另请注意,哈希值中的值不一定是唯一的。
答案 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 }