【问题标题】:How to get min key value pair in hash如何在哈希中获取最小键值对
【发布时间】:2014-07-26 09:13:01
【问题描述】:

我想获取哈希中的最小值。

输入:

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}

【问题讨论】:

  • 如果有多个最小值怎么办?
  • 我需要所有最小的键/值对。如果 {'a'=>1,'b'=>1,'c'=>2}。预期结果是 {'a'=>1,'b'=>1}

标签: ruby-on-rails ruby hash min


【解决方案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}

test.group_by(&:last).min_by(&:first).last.to_h # => {"f"=>0.02}

【讨论】:

    【解决方案2】:
    test.select { |_, v| v == test.values.min }
    

    为了提高效率:

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

    【讨论】:

      【解决方案3】:

      根据您的数据

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

      【讨论】:

      • 低质量帖子的审查:请更好地格式化您的代码。也写一些对建议的解决方案的解释。在目前的形式中,出于适度的原因,这个答案可能会被删除。我不投票赞成删除只是因为它似乎是解决问题的好方法。其他人可能不会那么慷慨。
      【解决方案4】:

      您也可以在不使用.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] 希望这有帮助!!!

      【讨论】:

        猜你喜欢
        • 2020-11-24
        • 2014-02-20
        • 2021-12-30
        • 2015-02-05
        • 1970-01-01
        • 2015-01-10
        • 2021-07-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多