1

私は配列を持っています:

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か?

4

2 に答える 2

12

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-07T11:12:23.257 に答える