[英]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.