Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
15
Help us understand the problem. What is going on with this article?
@ddd555

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

More than 1 year has passed since last update.

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

配列の中から偶数番目または奇数番目の要素を取り出したいときに役に立ったので共有します。
今回は、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メソッドを使用する。



初心者なりに考えたやり方になりますので、他にも色々なやり方がたくさんあると思います。
もしこんなやり方もあるよ!って方がいればぜひ教えていただければと思います。
読んでいただきありがとうございました。

15
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ynoc
クラウドを活用したシステムインテグレーションを提供しています

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
15
Help us understand the problem. What is going on with this article?