我有一个数组:
arr = [1,1,2,3,5,8,13,21,34]我想以与select相同的方式过滤数组,但也要分别收集所有不符合条件的元素:
[evens, odds] = arr.split_filter {|p| p % 2 == 0}
# evens = [2, 8, 34]
# odds = [1, 1, 3, 5, 13, 21]我能做到
evens = arr.select {|p| p % 2 == 0}
odds = arr.select {|p| p % 2 != 0}但这似乎是低效的。有没有人知道像split_filter这样的函数
发布于 2013-06-07 19:12:23
你在找Enumerable#partition
arr = [1,1,2,3,5,8,13,21,34]
evens, odds = arr.partition{|a| a % 2 == 0}
evens # => [2, 8, 34]
odds # => [1, 1, 3, 5, 13, 21]或者,简称为:
evens, odds = arr.partition(&:even?)发布于 2013-06-07 19:55:17
我们总是可以使用Enum#group_by来做同样的事情。
arr = [20,1,1,2,3,5,8,13,21,34]
even,odd = arr.group_by(&:even?).values_at(true,false)
even #=> [20, 2, 8, 34]
odd #=> [1, 1, 3, 5, 13, 21]https://stackoverflow.com/questions/16982700
复制相似问题