我有一个散列,我想返回最大值(或键/值对)的密钥(s)(或键/值对) s)的散列。所以,如果只有一个真正的最大值,它将返回一个密钥;但是,如果有多个具有相同值的键/值对,它将返回所有这些键。我怎样才能在Ruby中完成这项工作?红宝石 - 找到散列最大值的密钥
my_hash.max_by {|k,v| v} #only returns one key/value pair
我有一个散列,我想返回最大值(或键/值对)的密钥(s)(或键/值对) s)的散列。所以,如果只有一个真正的最大值,它将返回一个密钥;但是,如果有多个具有相同值的键/值对,它将返回所有这些键。我怎样才能在Ruby中完成这项工作?红宝石 - 找到散列最大值的密钥
my_hash.max_by {|k,v| v} #only returns one key/value pair
如果你希望所有的对,我会做类似
max = my_hash.values.max
Hash[my_hash.select { |k, v| v == max}]
为什么===?我认为这可能不会做你认为的事。 – pguardiario
@pguardiario一个坏习惯。我删除了它,谢谢。 – oldergod
单衬:
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"]]
我猜想它同样的问题回答这里http://stackoverflow.com/questions/6040494 /如何找到最大值的哈希键 –
您在哈希中存储什么样的值?你只处理整数? –
@yasirhashmi是的,除了我不想只返回一个,我想要返回多个k/v对,如果他们有相同的值。 – diasks2