大学生がプログラマーを目指すはなし

ruby, python, AIの話が多いです

rubyで配列のブロック処理にmapメソッドを使う

以前は配列にブロック処理をする際はほとんどの場合でeachを使っていたのですが、このmapメソッドを知ったときは目から鱗でした。

mapメソッドとは

mapメソッドは、各要素に対してブロックを評価した結果を新しい配列にして返します。

例えば、次のように配列の各要素を10倍した新しい配列を作るコードがあったとします。

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

new_nums = []

nums.each { |n| new_nums << n * 10 }

puts new_nums # => [10, 20, 30, 40, 50]

このような処理にmapメソッドを使うと

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

new_nums = nums.map { |n| n * 10 }

puts new_nums # => [10, 20, 30, 40, 50] 

このように3行で書けます。

mapメソッドを使うと、そのブロックでの戻り値を配列要素とする新しい配列を作成するので、それをそのまま新しい変数に代入することができます。

このように空配列を用意して、他の配列でループ処理した結果を代入していくような処理はよくあります。こういう時はmapメソッドを使った方が良いです。

その他の便利なメソッド

selectメソッド

selectメソッドとは、各要素にブロック処理をし、その戻り値がの要素だけを集めた配列を返すメソッドです。例えば次のようなコードで、偶数だけを集めた新しい配列を作れます。

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

odd_nums = nums.select { |n| n.odd? }

puts odd_nums # => [1, 3, 5]

rejectメソッド

rejectメソッドは、の要素だけを集めた配列を返すメソッドです

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

even_nums = nums.reject { |n| n.odd? }

puts even_nums # => [2, 4]

 

↓参考にした書籍です。

プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで