如何查找值最多的哈希的键

时间:2017-02-01 19:14:53

标签: arrays ruby hash max

我使用的是Ruby 2.4。

我有一个哈希,其键是一个数字,其值是一个元素数组。如何使用具有最多元素的值在哈希中找到键?我知道,如果我的价值是一个数字,我可以这样做:

my_hash.max_by { |k, v| v }

但由于该值是一个数组,我不知道如何告诉上面使用数组中的元素数量作为最大值。

3 个答案:

答案 0 :(得分:7)

max_by是正确的方法:

my_hash = { a: [1, 2], b: [1, 2, 3], c: [5] }

key, longest_array = my_hash.max_by{ |k, array| array.size }

p key
#=> :b

p longest_array
#=> [1, 2, 3]

您只需指定比较应该在哪个对象上。在这种情况下,数组值的大小。

您可能需要先添加一些检查:只有在所有哈希值都响应:size时才会生效。

答案 1 :(得分:1)

你可以这样做:

my_hash.map {|k, v| [k, v.count]}.max_by {|k, v| v}.first

第一个地图将返回两个元素数组的数组。对于它们中的每一个,第一个元素是键,第二个元素是相应数组的元素数。然后它使用max_by返回具有最大元素数的两个元素数组。最后,first方法返回密钥。

答案 2 :(得分:0)

我不确定我是否理解你的问题,但我假设你有这样的事情:

my_hash = {1=>[2, 1, 3, 4], 2=>[1, 2], 3=>[1, 4, 6]}

如果是这种情况,您可以获得最大数组的密钥:

my_hash.max_by{|k,v| v.count}.first