インデックス付きの each
CoddyのRubyジャーニー「基礎」セクションの一部 — レッスン 66/88。
時には、操作している要素だけでなく、配列内でのその位置も知る必要がある場合があります。Rubyのeach_with_indexメソッドを使用すると、1回の反復で要素とそのインデックスの両方を取得できます。
仕組みは以下の通りです:
fruits = ["apple", "banana", "cherry"]
fruits.each_with_index do |fruit, index|
puts "#{index}: #{fruit}"
end次のように出力されます:
0: apple
1: banana
2: cherryブロックがパイプの間に2つの変数を受け取るようになったことに注目してください。最初に要素が、その次にインデックスが来ます。配列の要素に直接アクセスする場合と同様に、インデックスは0から始まります。
これは、番号付きリストを表示したり、位置を追跡したりする必要がある場合に特に便利です。
tasks = ["Buy groceries", "Clean room", "Call mom"]
tasks.each_with_index do |task, i|
puts "Task #{i + 1}: #{task}"
endインデックスに1を加えることで、0からではなく1から始まる、人間に分かりやすい番号付きリストを作成できます。each_with_indexメソッドを使用すると、カウンター変数を手動で追跡する必要がなくなり、コードがよりクリーンでエラーが発生しにくくなります。
チャレンジ
簡単カンマで区切られた単語を含む1行の入力を読み取ります(例:apple,banana,cherry,date)。
入力を文字列の配列に分割し、each_with_index を使用して、0からではなく1から始まる番号付きリストとして各項目を出力してください。
各行は次の形式に従う必要があります:Item 1: apple
例えば、入力が apple,banana,cherry,date の場合、出力は次のようになります:
Item 1: apple
Item 2: banana
Item 3: cherry
Item 4: date入力が red,green,blue の場合、出力は次のようになります:
Item 1: red
Item 2: green
Item 3: blue入力が monday,tuesday,wednesday,thursday,friday の場合、出力は次のようになります:
Item 1: monday
Item 2: tuesday
Item 3: wednesday
Item 4: thursday
Item 5: friday入力が solo の場合、出力は次のようになります:
Item 1: soloチートシート
each_with_index メソッドを使用すると、要素とそのインデックスの両方にアクセスしながら配列を反復処理できます。
fruits = ["apple", "banana", "cherry"]
fruits.each_with_index do |fruit, index|
puts "#{index}: #{fruit}"
end出力:
0: apple
1: banana
2: cherryブロックは2つの変数を受け取ります。最初に要素、次にインデックスです。インデックスは0から始まります。
1から始まる人間にとって分かりやすい番号付きリストを作成するには、インデックスに1を加算します。
tasks = ["Buy groceries", "Clean room", "Call mom"]
tasks.each_with_index do |task, i|
puts "Task #{i + 1}: #{task}"
end自分で試してみよう
# カンマ区切りの入力を読み込む
input = gets.chomp
# 入力を配列に分割する
items = input.split(",")
# TODO: each_with_index を使用して、各項目を番号付きリストとして表示する
# 注意:インデックスは0から始まりますが、1から始まるように表示する必要があります
# フォーマット: "Item 1: apple"このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。