Menu
CoddyTech

範囲による配列のスライス

CoddyのRubyジャーニー「基礎」セクションの一部。レッスン 69/88。

個々の要素にアクセスするのではなく、配列の一部分を取り出す必要がある場合もあります。Rubyでは範囲を使って配列をスライスでき、指定した要素だけを含む新しい配列が作成されます。

範囲を使って配列をスライスするには、範囲を角括弧の中に入れます。

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から最後の要素まですべてを取り出せます。配列の長さがわからない場合に、最初の要素を飛ばしたいときに便利です。

challenge icon

チャレンジ

簡単

2つの入力を読み取ります:

  1. カンマ区切りの整数を1行で(例:10,20,30,40,50,60,70)
  2. 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

自分で試してみよう

# カンマ区切りの値を読み込む
input_values = gets.chomp

# 範囲の指定を読み込む
range_spec = gets.chomp

# TODO: 以下にコードを書く
# 1. input_valuesを配列に分割する
# 2. range_specを解析し、開始位置、終了位置、および..と...のどちらを使うかを決める
# 3. 適切な範囲を使って配列を切り出す
# 4. 切り出した部分の各要素を1行ずつ出力する
quiz icon腕試し

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

基礎のすべてのレッスン

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