有没有一个函数,通过一些非布尔 predicate 将一个集合(Enumerable)划分成两个以上的分区?(我的数学知识生疏了--但我认为,这被称为“factorize”--或者至少在德语中是“Faktorisierung”)
这是我昨天的问题(Ruby: how to split a collection by predicate into two collections in ruby?)
我想知道,是否还有另一个标准的ruby方法我刚刚错过了。
这里有一个例子,展示了这个原理:
def factorize(eee)
h={}; h.default_proc= proc{|h,k| h[k]=[] }
eee.each{|e| k=yield e; h[k]<<e }
h.values
end
factorize( 1..10 ){|n| n%3 } #=> [[1, 4, 7, 10], [2, 5, 8], [3, 6, 9]]
2条答案
按热度按时间k4emjkb11#
您可以使用group_by:https://apidock.com/ruby/v2_5_5/Enumerable/group_by
示例:
wko9yo5t2#
你可以这样写
产出