Edited at

Ruby | 配列の奇数番目と偶数番目を取り出す方法


配列の奇数番目や偶数番目を取り出して新たな配列にする

配列の中から偶数番目または奇数番目の要素を取り出したいときに役に立ったので共有します。

今回は、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メソッドを使用する。




初心者なりに考えたやり方になりますので、他にも色々なやり方がたくさんあると思います。

もしこんなやり方もあるよ!って方がいればぜひ教えていただければと思います。

読んでいただきありがとうございました。