Menu
Coddy logo textTech

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, 8

each との主な違いは、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, Bob

mapcollect メソッドは同一です。Ruby は両方の名前を提供しているため、コード内でより読みやすい方を使用できます。ほとんどの Ruby 開発者は、より短いため map を好みます。

challenge icon

チャレンジ

簡単

カンマ区切りの整数を含む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, Bob

mapcollectは同一のメソッドです。ほとんどのRuby開発者はmapを好んで使用します。

自分で試してみよう

# カンマ区切りの入力を読み込む
input = gets.chomp

# TODO: 以下にコードを記述してください
# 1. 入力文字列を整数の配列に分割する
# 2. mapメソッドを使用して各数値を2乗する
# 3. 2乗した各数値をそれぞれの行に出力する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン