Ruby:如何通过 predicate 将集合(Enumerable)拆分为多个(>2个)分区?

tjrkku2a  于 2023-02-03  发布在  Ruby
关注(0)|答案(2)|浏览(134)

有没有一个函数,通过一些非布尔 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]]
k4emjkb1

k4emjkb11#

您可以使用group_by:https://apidock.com/ruby/v2_5_5/Enumerable/group_by
示例:

(1..10).group_by { |n| n % 3 }.values
=> [[1, 4, 7, 10], [2, 5, 8], [3, 6, 9]]
wko9yo5t

wko9yo5t2#

你可以这样写

def factorize(eee)
  eee.group_by { |e| yield e }.values
end

p factorize(1..10) { |n| n % 3 }

产出

#=> [[1, 4, 7, 10], [2, 5, 8], [3, 6, 9]]

相关问题