map と collect
CoddyのRubyジャーニー「基礎」セクションの一部 — レッスン 68/88。
each は要素に対してアクションを実行するのに適していますが、配列を新しい配列に変換したい場合もあります。map メソッド(collect とも呼ばれます)はまさにこれを行います。各要素に対してブロックを実行した結果を含む新しい配列を作成します。
numbers = [1, 2, 3, 4]
doubled = numbers.map { |n| n * 2 }
puts doubled # 出力: 2, 4, 6, 8each との主な違いは、map が変換された値を含む新しい配列を返すことです。元の配列は変更されません。
以下は、摂氏を華氏に変換する実用的な例です。
celsius = [0, 20, 100]
fahrenheit = celsius.map { |c| c * 9 / 5 + 32 }
puts fahrenheit # 出力: 32, 68, 212また、map を文字列に対して使用することもできます:
names = ["alice", "bob"]
capitalized = names.map { |name| name.capitalize }
puts capitalized # 出力: Alice, Bobmap と collect メソッドは同一です。Ruby は両方の名前を提供しているため、コード内でより読みやすい方を使用できます。ほとんどの Ruby 開発者は、より短いため map を好みます。
チャレンジ
簡単カンマ区切りの整数を含む1行の入力を読み取ります(例:2,4,6,8,10)。
入力を整数の配列に分割し、map メソッドを使用して、各数値を2乗(それ自体を掛ける)した新しい配列を作成します。
新しい2乗された配列の各要素を、それぞれの行に出力してください。
例えば、入力が 2,4,6,8,10 の場合、出力は以下のようになります:
4
16
36
64
100入力が 1,2,3,4,5 の場合、出力は以下のようになります:
1
4
9
16
25入力が 3,7,11 の場合、出力は以下のようになります:
9
49
121入力が 10 の場合、出力は以下のようになります:
100チートシート
mapメソッド(collectとも呼ばれます)は、各要素にブロックを適用することで、配列を新しい配列に変換します。このメソッドは変換された値を持つ新しい配列を返し、元の配列は変更しません。
numbers = [1, 2, 3, 4]
doubled = numbers.map { |n| n * 2 }
puts doubled # 出力: 2, 4, 6, 8温度変換の例:
celsius = [0, 20, 100]
fahrenheit = celsius.map { |c| c * 9 / 5 + 32 }
puts fahrenheit # 出力: 32, 68, 212文字列の例:
names = ["alice", "bob"]
capitalized = names.map { |name| name.capitalize }
puts capitalized # 出力: Alice, Bobmapとcollectは同一のメソッドです。ほとんどのRuby開発者はmapを好んで使用します。
自分で試してみよう
# カンマ区切りの入力を読み込む
input = gets.chomp
# TODO: 以下にコードを記述してください
# 1. 入力文字列を整数の配列に分割する
# 2. mapメソッドを使用して各数値を2乗する
# 3. 2乗した各数値をそれぞれの行に出力するこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。