如何在哈希中获取min键值对

时间:2014-06-05 11:33:51

标签: 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}

4 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:8)

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

提高效率:

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

答案 2 :(得分: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} 

答案 3 :(得分:0)

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

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

我必须为我正在上课的课程做类似的事情。我们还必须返回JUST THE KEY。对于你只做同样的事情,只返回test[0][0] 希望这很有用!!!