PerlerのRuby日記

Rubyとか

配列の要素を条件によって2つに割ってループしたい

配列の中のものに同じ処理を施すんだけど、先に奇数を処理してから、偶数を処理したい。

numbers = [1,2,3,4,5,6,7,8,9,10]
numbers.select{|n| n.odd?}.each{|n| puts n*n}
numbers.reject{|n| n.odd?}.each{|n| puts n*n}

Array#rejectとかselectでは、条件によって割ることができなくって、探したらArray#partitionがあった。

numbers.partition{|n| n.odd?} #=> [[1, 3, 5, 7, 9], [2, 4, 6, 8, 10]]

都合よく前半後半に分割されたので、flattenしてeachできた。

numbers.partition{|n| n.odd?}.flatten.each{|n| puts n*n}