mapの連結
CoddyのRubyジャーニー「ロジックとフロー」セクションの一部。レッスン 22/56。
基礎編でmapについて学びました。これは各要素を変換して新しい配列を作成します。selectやrejectなどとチェーンすると、その真価を発揮します。
各メソッドは配列を返すため、結果に対して別のメソッドを呼び出すことで処理を続けられます。
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コードのいたるところで使われています。見かけたら認識できるようにしましょう。
チャレンジ
簡単カンマ区切りの単語のリストを読み込みます。3文字より長い単語を大文字にして、, で結合し、1行に出力します。
1つのchainとして構築します。長い単語をselectし、それらに&:upcaseを使ってmapし、その後joinします。
入力がhi,hello,yo,coddy,supの場合、出力は次のようになります。
HELLO, CODDY自分で試してみよう
words = gets.chomp.split(",")
# TODO: select + map(&:upcase) + join をチェーンする
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Rubyオンラインコンパイラ