我使用的是Ruby 2.4。
我有一个哈希,其键是一个数字,其值是一个元素数组。如何使用具有最多元素的值在哈希中找到键?我知道,如果我的价值是一个数字,我可以这样做:
my_hash.max_by { |k, v| v }
但由于该值是一个数组,我不知道如何告诉上面使用数组中的元素数量作为最大值。
答案 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