each イテレータ
CoddyのRubyジャーニー「基礎」セクションの一部 — レッスン 65/88。
Rubyは、forやwhileループを使用するよりも、配列をループ処理するためのよりエレガントな方法を提供します。eachイテレータは、コレクション内のすべての要素を処理するための、Rubyで推奨される方法です。
基本的な構文は次の通りです:
fruits = ["apple", "banana", "cherry"]
fruits.each do |fruit|
puts fruit
endこれは各フルーツを別々の行に出力します。パイプ(|fruit|)の間の変数は、ブロック変数と呼ばれます。イテレータが配列内を移動する間、各要素を一時的に保持します。
1行のブロックでは、do...endの代わりに波括弧を使用できます:
numbers = [1, 2, 3]
numbers.each { |n| puts n * 2 }each メソッドは、各要素に対して任意の操作を実行できるため強力です。以下は、累計を計算する例です:
prices = [10, 25, 15]
total = 0
prices.each do |price|
total += price
end
puts total # 出力: 50for ループとは異なり、each 内のブロック変数はブロック内に収まったままになるため、コードがよりクリーンになり、予期しない動作が発生しにくくなります。
チャレンジ
簡単カンマ区切りの整数を含む1行の入力を読み込みます(例:4,7,2,9,5)。
入力を整数の配列に分割し、each イテレータを使用して以下の処理を行ってください:
- 各数値を3倍した値を、それぞれ新しい行に出力する
- すべての数値の合計を計算し、ループの後にそれを出力する
ループの前に 0 で初期化した変数を使用し、配列を反復処理しながら合計を蓄積してください。
例えば、入力が 4,7,2,9,5 の場合、出力は以下のようになります:
12
21
6
27
15
Sum: 27入力が 10,20,30 の場合、出力は以下のようになります:
30
60
90
Sum: 60入力が 1,2,3,4 の場合、出力は以下のようになります:
3
6
9
12
Sum: 10入力が 5 の場合、出力は以下のようになります:
15
Sum: 5チートシート
each イテレータは、配列をループ処理するための Ruby で推奨される方法です:
fruits = ["apple", "banana", "cherry"]
fruits.each do |fruit|
puts fruit
endパイプで囲まれた変数 (|fruit|) は、各要素を一時的に保持するブロック変数です。
1行のブロックの場合は、波括弧を使用します:
numbers = [1, 2, 3]
numbers.each { |n| puts n * 2 }合計の計算など、各要素に対して操作を実行できます:
prices = [10, 25, 15]
total = 0
prices.each do |price|
total += price
end
puts total # 出力: 50自分で試してみよう
# カンマ区切りの整数を読み込む
input = gets.chomp
# 入力を整数の配列に分割する
numbers = input.split(",").map(&:to_i)
# 合計変数を初期化する
sum = 0
# TODO: 以下にコードを記述してください
# eachイテレータを使用して以下を行ってください:
# 1. 各数値を3倍して出力する
# 2. 各数値をsum変数に加算する
# 最終的な合計を出力する
puts "Sum: #{sum}"このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。