繁体   English   中英

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

[英]Determining if a collection has more than one max value

现在,我正在这样做,并且它的工作原理是:

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

但我怀疑有一种更清洁的方法。

您可以执行以下代码段:

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在内部循环中计算groups.max.size

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM