确定集合是否具有多个最大值

时间:2015-09-23 10:54:01

标签: arrays ruby

现在我正在做这件事,并且有效:

groups = [[1, 1, 1], [2, 2]]
groups.select { |g| g.size == groups.max.size }.size
# => 1 # a clear majority

groups = [[1, 1], [2, 2]]
groups.select { |g| g.size == groups.max.size }.size
# => 2 # needs to be passed to another filter

但我怀疑那里有一种更清洁的方式。

1 个答案:

答案 0 :(得分:3)

您可以执行此代码段:

groups.group_by(&:size)[groups.max.size].size

让我快速解释一下这是做什么的。我提前为不良措辞道歉,因为“小组”在这里是一个相当过载的术语......

它的作用是首先按大小对数组进行分组。这会返回一个哈希:

groups = [[1, 1, 1], [2, 2]]
grouped = groups.group_by(&:size)
# => {3=>[[1, 1, 1]], 2=>[[2, 2]]}

然后,您获取包含与最大组

一样多的元素的组数组
largest_list = grouped[groups.max.size]
# => [[2, 2]]

现在,您可以简单地获取此数组的大小以获取具有此长度的组的数量:

largest_list.size
# => 1

你的方法相当慢的原因是你每次都在内循环中计算groups.max.size

相关问题