範囲による配列のスライス
CoddyのRubyジャーニー「基礎」セクションの一部 — レッスン 69/88。
時として、個々の要素にアクセスするのではなく、配列の一部を抽出する必要がある場合があります。Rubyでは範囲(range)を使用して配列をスライスすることができ、これにより指定した要素のみを含む新しい配列が作成されます。
範囲を指定して配列をスライスするには、角括弧の中に範囲を記述します:
numbers = [10, 20, 30, 40, 50]
slice = numbers[1..3]
puts slice # 出力: 20, 30, 40範囲 1..3 には、インデックス 1、2、3 の要素が含まれます。配列のインデックスは 0 から始まるため、インデックス 1 は 2 番目の要素であることに注意してください。
3つのドットの範囲(...)を使用して、最後のインデックスを除外することもできます:
letters = ["a", "b", "c", "d", "e"]
slice = letters[0...3]
puts slice # 出力: a, b, cここでは、0...3はインデックス0、1、2を含みますが、インデックス3の手前で停止します。
負のインデックスは範囲でも機能します。これらは配列の末尾からカウントされ、-1 が最後の要素となります:
colors = ["red", "green", "blue", "yellow"]
slice = colors[1..-1]
puts slice # 出力: green, blue, yellowこれはインデックス1から最後の要素までをすべて抽出します。配列の長さを知らなくても最初の要素をスキップしたい場合に便利です。
チャレンジ
簡単2つの入力を読み込んでください:
- カンマで区切られた整数の1行(例:
10,20,30,40,50,60,70) start..endまたはstart...end形式の範囲指定(例:2..5または1...4)
最初の入力を整数の配列に分割します。次に、2番目の入力の範囲を使用して配列をスライスし、スライスされた部分の各要素をそれぞれの行に出力してください。
範囲の入力には、終了インデックスを含む2つのドット(..)、または終了インデックスを含まない3つのドット(...)のいずれかが使用されます。
例えば、入力が 10,20,30,40,50,60,70 と 2..5 の場合、出力は以下のようになります:
30
40
50
60入力が 5,10,15,20,25,30 と 0...3 の場合、出力は以下のようになります:
5
10
15入力が 100,200,300,400,500 と 1..-1 の場合、出力は以下のようになります:
200
300
400
500入力が a,b,c,d,e,f と -3..-1 の場合、出力は以下のようになります:
d
e
fチートシート
配列の一部を抽出するには、角括弧の中で範囲(range)を使用します:
numbers = [10, 20, 30, 40, 50]
slice = numbers[1..3]
# [20, 30, 40] を返します(インデックス 1、2、3)終了インデックスを含めるには、2つのドット(..)を使用します:
letters = ["a", "b", "c", "d", "e"]
slice = letters[0..2]
# ["a", "b", "c"] を返します(インデックス 0、1、2)終了インデックスを除外するには、3つのドット(...)を使用します:
letters = ["a", "b", "c", "d", "e"]
slice = letters[0...3]
# ["a", "b", "c"] を返します(インデックス 0、1、2。3の手前で停止します)負のインデックスは配列の末尾から数えます(-1 は最後の要素です):
colors = ["red", "green", "blue", "yellow"]
slice = colors[1..-1]
# ["green", "blue", "yellow"] を返します(インデックス 1 から最後の要素まで)自分で試してみよう
# カンマ区切りの値を読み込む
input_values = gets.chomp
# 範囲指定を読み込む
range_spec = gets.chomp
# TODO: 以下にコードを記述してください
# 1. input_values を分割して配列にする
# 2. range_spec を解析して、開始位置、終了位置、および .. または ... のどちらを使用するかを決定する
# 3. 適切な範囲を使用して配列をスライスする
# 4. スライスされた部分の各要素をそれぞれの行に出力するこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。