如何在哈希表中获取最小的键值对

7

我希望你能够获取哈希表中最小的值。

输入:

test = {'a'=> 1, 'b'=> 2, 'c' => 0.4, 'd' => 0.32, 'e' => 0.03, 'f' => 0.02, 'g'=> 0.1}

期望的结果:

{'f'=> 0.02}

如何获得预期结果?

我需要所有最小的键/值对。例如,如果 {'a'=>1,'b'=>1,'c'=>2},则预期结果应为 {'a'=>1,'b'=>1}


3
如果有多个最小值,你想要做什么? - Mike H-R
1
我需要所有最小的键/值对。如果 {'a'=>1,'b'=>1,'c'=>2},期望的结果是 {'a'=>1,'b'=>1}。 - Galet
4个回答

15
[test.min_by{|k, v| v}].to_h
答案在改变后的问题中回答:
test.group_by{|k, v| v}.min_by{|k, v| k}.last.to_h # => {"f"=>0.02}
或者
test.group_by(&:last).min_by(&:first).last.to_h # => {"f"=>0.02}

10
test.select { |_, v| v == test.values.min }
为了使其更加高效:

min_val = test.values.min
test.select { |_, v| v == min_val }

0

您也可以在不使用.min方法的情况下实现此操作:

def min_key_value_pair (test)
  if test == {}
       return nil
  else
       test = test.sort_by {|k, v| v}
       test[0]
   end
end

我在上课时也需要做类似的事情。我们还必须仅返回密钥,你可以做同样的事情,只需返回test[0][0]即可。 希望这对你有所帮助!

0
根据您提供的数据:
在Ruby控制台上运行以下命令:
test = {'a'=> 1, 'b'=> 2, 'c' => 0.4, 'd' => 0.32, 'e' => 0.03,
'f' => 0.02, 'g'=> 0.1}

Hash[*test.sort_by(&:last)[0]]

输出将根据您的期望进行

 => {"f"=>0.02} 

2
低质量帖子的评论:请更好地格式化您的代码。同时,写一些关于提出解决方案的解释。以当前形式,此答案可能因为审核原因而被删除。我没有投票删除,只是因为它似乎是解决问题的好方法。但其他人可能不会那么慷慨。 - ElmoVanKielmo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接