Menu
Coddy logo textTech

mapの連結

CoddyのRubyジャーニー「ロジックとフロー」セクションの一部。レッスン 22/56。

基礎編でmapについて学びました。これは各要素を変換して新しい配列を作成します。selectrejectなどとチェーンすると、その真価を発揮します。

各メソッドは配列を返すため、結果に対して別のメソッドを呼び出すことで処理を続けられます。

numbers = [1, 2, 3, 4, 5]
result = numbers
  .select { |n| n.odd? }
  .map    { |n| n * 10 }
puts result.inspect   # [10, 30, 50]

chainを上から下へ読みます:numbersから始め、oddのものを残し、それぞれに10を掛けます。一時変数もループもありません。

ショートカット &:method_name は、ブロックが 1 つのメソッドを呼び出すだけの場合に使えます。

["hi", "yo"].map { |s| s.upcase }   # ["HI", "YO"]
["hi", "yo"].map(&:upcase)         # ["HI", "YO"]  (同じ)

この省略記法はRubyコードのいたるところで使われています。見かけたら認識できるようにしましょう。

challenge icon

チャレンジ

簡単

カンマ区切りの単語のリストを読み込みます。3文字より長い単語を大文字にして、, で結合し、1行に出力します。

1つのchainとして構築します。長い単語をselectし、それらに&:upcaseを使ってmapし、その後joinします。

入力がhi,hello,yo,coddy,supの場合、出力は次のようになります。

HELLO, CODDY

自分で試してみよう

words = gets.chomp.split(",")

# TODO: select + map(&:upcase) + join をチェーンする
quiz icon腕試し

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

ロジックとフローのすべてのレッスン

自分で練習してみよう: Rubyオンラインコンパイラ