本文へスキップ
BecomeCoder

Rubyコース · 第3章 配列 · レッスン15

mapとselect/reject ― 新しい配列を作る

ブラウザで完結

導入

配列の全要素を加工した新しい配列を作りたい、あるいは条件に合う要素だけを集めたい――そんなときに使うのが mapselect/reject です。each と違い、新しい配列を返すのが特徴です。

説明

map はブロックの結果を集めた新しい配列を作ります。

numbers = [1, 2, 3, 4, 5]
doubled = numbers.map { |n| n * 2 }
puts doubled.inspect

select は条件(ブロックが true になるもの)に合う要素だけを集めます。reject はその逆で、条件に合わない要素だけを集めます。

evens = numbers.select { |n| n.even? }
puts evens.inspect

odds = numbers.reject { |n| n.even? }
puts odds.inspect

.even? は偶数かどうかを判定するメソッドです(奇数なら .odd?)。? で終わるメソッドは true/false を返す習慣があります。ブロックは do..end の代わりに { } で書くこともでき、1行で済む短いブロックでは { } がよく使われます。

やってみよう

map のブロックの中身を変えて、n * n(2乗)や n + 10 のような別の加工を試してみましょう。

演習

配列 nums = [1, 2, 3, 4]map で3倍した配列にして、.inspect で表示してください([3, 6, 9, 12])。

ヒント1を見る

nums.map { |n| n * 3 } の結果を変数に入れて .inspect で表示します。

ヒント2を見る

puts nums.map { |n| n * 3 }.inspect のように直接つなげてもよいです。

実際に動かしてみよう

下のエディタにRubyを書いて「実行」を押すと、学習用シミュレータが puts / print / p の出力を表示します(本物のRubyではなく、教材の範囲を再現した軽量な自作エンジンです)。配列・ハッシュ・ブロック(each/map/select)・メソッド・クラス・モジュール・例外なども動きます。本文の例を書き換えて動かしてみましょう(gem・Rails・ファイル入出力など一部の機能は対象外です。文字列を伸ばすときは str << も可能ですが、変数に反映されるのは str += です)。

Ruby — ブラウザ内で実行(学習用シミュレータ)

Rubyの教材サブセットを動かす学習用シミュレータを読み込みます(本物のRubyではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。