配列の奇数番目や偶数番目を取り出して新たな配列にする
配列の中から偶数番目または奇数番目の要素を取り出したいときに役に立ったので共有します。
今回は、each_slice
メソッドとmap
メソッドを使用してやってみました。
参考記事
each_slice (Enumerable) - Rubyリファレンス
ある配列を任意の要素数の配列に分割したい - Qiita
結論はこんな感じです。
ary = [1,2,3,4,5,6,7,8,9,10]
odd = ary.each_slice(2).map(&:first)
even = ary.each_slice(2).map(&:last)
p odd #=>[1,3,5,7,9]
p even #=>[2,4,6,8,10]
少し分解して考えてみた
結論の書き方だと何をやっているのかイマイチ分かりにくいと思いますので、自分なりに分解してみました。
ある配列を任意の要素数の配列に分割したい - Qiita
each_slice
については、上の記事が分かりやすく解説していました。
each_slice(数)
: 数の部分には何分割するかを決める数値を入れる
なので、数の部分を2
とすると、配列を2つずつ取り出して、それをさらにmapメソッドで配列に入れている感じです。
ary.each_slice(2).map {|n| n}
#=>[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
これを利用して、以下のようにします。
odd = ary.each_slice(2).map {|n| n.first} #[1, 2].firstみたいなことを繰り返している
#=>[1,3,5,7,9]
even = ary.each_slice(2).map {|n| n.last}
#=>[2,4,6,8,10]
- 取り出した配列
n
の要素の1番目を取り出すと、奇数番目の配列が完成する。
つまりfirst
メソッドを使用する。 - 取り出した配列
n
の要素の2番目を取り出すと、偶数番目の配列が完成する。
つまりlast
メソッドを使用する。
初心者なりに考えたやり方になりますので、他にも色々なやり方がたくさんあると思います。 もしこんなやり方もあるよ!って方がいればぜひ教えていただければと思います。 読んでいただきありがとうございました。