LoginSignup
5
4

More than 3 years have passed since last update.

【each, map...】今夜、配列処理をくらべてみました【ruby】

Last updated at Posted at 2020-08-27

rubyの配列の要素を操作するメソッドってたくさんありますよね。
結局、どれがどんな挙動で、どれが一番効率よくかけるかどうか比較するためにまとめてみましたよ。

配列の操作早見表

メソッド 戻り値 挙動
each レシーバの配列 ブロック内で配列の要素をひとつずつ、繰り返し処理
each_slice nil ブロック内で配列の要素を複数単位で、繰り返し処理
each_with_index レシーバの配列 ブロック内で配列の要素とインデックス番号をそれぞれ繰り返し処理
map 変化した配列 配列のまま、要素を変化させる
select 変化した配列 配列のまま、条件式がtrueになる要素に絞る
reject 変化した配列 配列のまま、条件式がfalseになる要素に絞る
find 要素 要素の中で、最初にヒットした要素を取り出す

繰り返し処理

each

要素を単数でループさせる


array = ["リンゴ", "ミカン", "スイカ", "メロン"]

array.each do |obj|
  p obj
end
返り値
リンゴ
ミカン
スイカ
メロン
=> ["リンゴ", "ミカン", "スイカ", "メロン"]

each_slice

要素を複数で、ループさせる


array.each_slice(2) do |a|
  p a
  p a
end
返り値
["リンゴ", "ミカン"]
["スイカ", "メロン"]
=> nil

each_with_index

要素と一緒にインデックスも取り出せる


array.each_with_index do |obj,index|
  p obj
  p index
end
返り値
"リンゴ"
0
"ミカン"
1
"スイカ"
2
"メロン"
3
=> ["リンゴ", "ミカン", "スイカ", "メロン"]

要素の中身を直接、変化させる

map

要素をいじって、配列で返す


array = [1, 2, 3, 4, 5]

array_new = array.map{ |i| i*2 }
返り値
[2, 4, 6, 8, 10]

select

条件式の戻り値がtrueの要素を、配列で返す


array = [1, 2, 3, 4, 5]

array_new = array.select{ |i| i > 3 }
返り値
[4, 5]

reject

条件式の戻り値がfalseの要素を、配列で返す


array = [1, 2, 3, 4, 5]

array_new = array.reject{ |i| i % 2 == 0 }
返り値
[1, 3, 5]

find

条件式にtrueになった最初の要素を検索して取り出す


array = [1, 2, 3, 4, 5]

array_new = array.find{ |i| i > 3 }
返り値
4
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4