Pythonなどの言語においては、配列内の区間を指定して部分配列を取り出す次のような構文(arr[from..to]
やarr[from:until]
など)が用意されています。
部分配列の切り出し(Python)
lst = [0, 1, 2, 3, 4, 5]
segment = lst[2:5] # from 2 until 5
print lst
print segment
実行結果
[0, 1, 2, 3, 4, 5] [2, 3, 4]
部分配列の切り出し(Ruby)
arr = [0, 1, 2, 3, 4, 5]
segment = arr[2..4] # from 2 to 4
p array
p segment
実行結果
[0, 1, 2, 3, 4, 5] [2, 3, 4]
部分配列の切り出し(JavaScript)
var arr = [0, 1, 2, 3, 4, 5];
var subarr = arr.slice(2, 5); // from 2 until 5
console.log(arr);
console.log(subarr);
実行結果
Array [ 0, 1, 2, 3, 4, 5 ] Array [ 2, 3, 4 ]
C# 8.0以降(.NET Core 3.0以降)では、これに相当する範囲構文を使用することができます。 範囲構文は、Rubyと類似した構文[n..m]
を使いますが、表す範囲はPython・JavaScriptと同じく[from..until]
であり、終端側が開区間となっている半開区間の範囲になります。
using System;
class Sample {
static void Main()
{
var arr = new int[] {0, 1, 2, 3, 4, 5};
// arrのインデックス2から5より前まで(2以上5未満)の3要素分の部分配列を切り出す
var segment = arr[2..5];
Console.WriteLine(string.Join(", ", arr));
Console.WriteLine(string.Join(", ", segment));
}
}
実行結果
0, 1, 2, 3, 4, 5 2, 3, 4
一方それ以前のバージョンのC#やVBではこれに相当する構文は用意されていません。 また、JavaScriptなどの言語におけるslice
のようなメソッドも用意されていません。
このような部分配列を切り出すような構文やメソッドは用意されていませんが、ArraySegment構造体を用いるとこれに似た操作を行うことができます。
部分配列を取得する方法や、配列の一部分をコピーして部分配列を作成する方法については部分配列を参照してください。