Ruby on rails 如何在散列中获取最小键值对

Ruby on rails 如何在散列中获取最小键值对,ruby-on-rails,ruby,hash,min,Ruby On Rails,Ruby,Hash,Min,我想获取散列中的最小值 输入: 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} [test.min_by{|k, v| v}].to_h

我想获取散列中的最小值

输入:

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}

[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}

为了提高效率:

min_val = test.values.min
test.select { |_, v| v == min_val }
根据你提供的数据

在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} 

您也可以在不使用
.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]

希望这是有帮助的

如果有多个最小值,您想做什么?我需要所有最小键/值对。如果{'a'=>1,'b'=>1,'c'=>2}。预期的结果是{'a'=>1,'b'=>1}对低质量帖子的审查:请将您的代码格式化得更好。对建议的解决方案也做一些解释。在当前形式下,出于适度的原因,可能会删除此答案。我不会投票赞成删除,只是因为这似乎是解决问题的好办法。其他人可能不会这么慷慨。
 => {"f"=>0.02} 
def min_key_value_pair (test)
  if test == {}
       return nil
  else
       test = test.sort_by {|k, v| v}
       test[0]
   end
end