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]
であり、終端側が開区間となっている半開区間の範囲になります。
一方それ以前のバージョンのC#やVBではこれに相当する構文は用意されていません。 また、JavaScriptなどの言語におけるslice
のようなメソッドも用意されていません。
このような部分配列を切り出すような構文やメソッドは用意されていませんが、ArraySegment構造体を用いるとこれに似た操作を行うことができます。
ArraySegment構造体を使って部分配列を構成する
Imports System
Class Sample
Shared Sub Main()
Dim arr() As Integer = New Integer() {0, 1, 2, 3, 4, 5}
' VBでは以下のような構文は用意されていない
'Dim segment() As Integer = arr(2..4)
' 配列にはこのようなメソッドは用意されていない
'Dim segment() As Integer = arr.Slice(2, 4)
' ArraySegmentを用いて、配列arrのインデックス2から3つ分の要素を参照する部分配列を作成する
Dim segment As New ArraySegment(Of Integer)(arr, 2, 3) ' from 2 length 3
Console.WriteLine(String.Join(", ", arr))
Console.WriteLine(String.Join(", ", segment))
End Sub
End Class
実行結果
0, 1, 2, 3, 4, 5 2, 3, 4
部分配列を取得する方法や、配列の一部分をコピーして部分配列を作成する方法については部分配列を参照してください。