Array.Copyメソッドでは、複写する長さだけでなく、複写元と複写先の始点となるインデックスを指定して複写することも出来ます。 Arrayクラスには部分配列を抜き出すArray.Sliceのようなメソッドは用意されていませんが、次の例のように配列の生成と部分配列の複写を行うことで、Array.Slice相当の処理を行うことが出来ます。
Array.Copyメソッドで部分配列の複写を行い抽出する
Imports System
Class Sample
Shared Sub Main()
' 複写元の配列
Dim arr1() As Integer = {0, 1, 2, 3, 4}
' 初期化されていない配列を確保
Dim arr2(2) As Integer
' arr1の部分配列(インデックス2から3個分)をarr2のインデックス0以降に複写
Array.Copy(arr1, 2, arr2, 0, 3)
For Each elem As Integer In arr2
Console.Write("{0}, ", elem)
Next
Console.WriteLine()
End Sub
End Class
実行結果
2, 3, 4,
この方法では部分配列を取得するために新たな配列インスタンスの作成と複写を行うことになりますが、ArraySegmentを使えばインスタンス生成や複写を行わずに部分配列のビューを取得・作成することもできます。
C# 8.0以降、.NET Core 3.0以降では、インデックス/範囲構文n..m
を使うことで部分配列の抽出を行うことができるようになっています。
using System;
class Sample {
static void Main()
{
// 複写元の配列
int[] arr1 = {0, 1, 2, 3, 4};
// arr1の部分配列(インデックス2から5より前まで、2以上5未満の3個分)をarr2として抽出
var arr2 = arr1[2..5];
foreach (var elem in arr2) {
Console.Write("{0}, ", elem);
}
Console.WriteLine();
}
}
実行結果
2, 3, 4,