インデックスによる配列のスライス
CoddyのRubyジャーニー「基礎」セクションの一部。レッスン 70/88。
Rubyでは、開始インデックスと長さを使って配列を切り出す別の方法もあります。範囲を指定する代わりに、開始位置と取り出す要素数の2つの数値を指定します。
構文では、開始インデックスと個数をカンマで区切ります。
numbers = [10, 20, 30, 40, 50]
slice = numbers[1, 3]
puts slice # 出力: 20, 30, 40これはインデックス1から始まる3つの要素を取り出します。最初の数値は開始位置で、2番目の数値は取り出したい要素の数です。
この方法は、必要な要素の数が正確にわかっている場合に特に便利です。
letters = ["a", "b", "c", "d", "e"]
first_two = letters[0, 2]
puts first_two # 出力: a, b負のインデックスもここで使えます。配列の末尾から始めることができます。
colors = ["red", "green", "blue", "yellow"]
last_two = colors[-2, 2]
puts last_two # 出力: blue, yellow利用可能な要素数を超える数の要素を要求しても、Rubyはエラーを発生させず、存在する要素だけを返します。
nums = [1, 2, 3]
slice = nums[1, 10]
puts slice # 出力: 2, 3必要な要素数がわかっている場合はこの方法を選び、正確な位置がわかっている場合は範囲を使います。
チャレンジ
簡単3つの入力を読み取ります:
- カンマ区切りの整数を並べた1行(例:
5,10,15,20,25,30,35,40) - 開始インデックス(整数)
- 取り出す要素数(整数)
最初の入力を整数の配列に分割します。開始インデックスと個数を使い、インデックスと長さを指定する構文で配列をスライスし、スライスした部分の各要素を1行ずつ出力します。
たとえば、入力が 5,10,15,20,25,30,35,40、2、4 の場合、出力は次のようになります:
15
20
25
30入力が 100,200,300,400,500、0、2 の場合、出力は次のようになります:
100
200入力が a,b,c,d,e,f,g、-3、2 の場合、出力は次のようになります:
e
f入力が 10,20,30、1、10 の場合、出力は次のようになります:
20
30自分で試してみよう
# 入力を読み取る
input_line = gets.chomp
start_index = gets.chomp.to_i
count = gets.chomp.to_i
# 入力を配列に分割する
arr = input_line.split(',')
# TODO: 以下に、インデックスと長さを指定する構文を使って配列を切り出すコードを書く
# そして各要素をそれぞれ別の行に出力するこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Rubyオンラインコンパイラ