【问题标题】:Ruby - find the key(s) of the largest value(s) of a hashRuby - 找到哈希最大值的键
【发布时间】:2012-10-11 21:45:12
【问题描述】:

我有一个散列,我想返回散列最大值的键(或键/值对)。因此,如果只有一个真正的最大值,它将返回那个键;但是,如果有多个具有相同值的键/值对,它将返回所有这些键。如何在 Ruby 中完成此任务?

my_hash.max_by {|k,v| v} #only returns one key/value pair

【问题讨论】:

  • 我猜这里回答了同样的问题stackoverflow.com/questions/6040494/…
  • 您在哈希中存储了什么样的值?你只处理整数吗?
  • @yasirhashmi 是的,除了我不想只返回一个,我想返回多个 k/v 对,如果它们具有相同的值。
  • @AmirRubin 键是字符串,值是浮点数。

标签: ruby hash max


【解决方案1】:

如果你想要所有对,我会做类似的事情

max = my_hash.values.max
Hash[my_hash.select { |k, v| v == max}]

【讨论】:

  • 为什么 === ?我认为这可能不会像您认为的那样。
【解决方案2】:

单班轮:

my_hash.reduce({}){|h,(k,v)| (h[v] ||= []) << k;h}.max

irb
> z = {:tree => 3, :two => 2, 'three' => 3}

>  z.reduce({}){|h,(k,v)| (h[v] ||= []) << k;h}.max
[3, [:tree, "three"]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-27
    • 2017-06-20
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多