C# での配列スライシング
このチュートリアルでは、C# で配列をスライスする方法を紹介します。
C# の Linq メソッドを使用した配列スライシング
アレイをより小さなサブアレイにスライスするプロセスは、アレイスライスと呼ばれます。Linq は、クエリ機能を C# のデータ構造と統合するために使用されます。Linq の Take(x)
関数は、データ構造の先頭から x
個の要素をコピーします。次のコード例は、C# で Linq を使用して配列をスライスする方法を示しています。
using System;
using System.Linq;
namespace array_slicing {
class Program {
static void Main(string[] args) {
string[] foo = { "one", "two", "three", "four", "five" };
string[] bar = foo.Take(2).ToArray();
foreach (var e in bar) {
Console.WriteLine(e);
}
}
}
}
出力:
one
two
文字列の配列 foo
を初期化し、それを別の文字列の配列である bar
にスライスしました。これには、foo
配列の最初の 2つの要素が含まれています。このメソッドでは配列の開始要素しかスライスできないため、このメソッドは非常に制限されています。
C# の ArraySegment
クラスを使用した配列スライシング
ArraySegment
クラスは、配列を C# のサブ配列にスライスするために使用されます。ArraySegment
クラスのコンストラクターは、セグメント化される配列、開始インデックス、およびセグメント化される要素の数を受け取り、サブ配列を提供します。次のコード例は、C# で ArraySegment
クラスを使用して配列をスライスする方法を示しています。
using System;
using System.Linq;
namespace array_slicing {
class Program {
static void Main(string[] args) {
string[] a = { "one", "two", "three", "four", "five" };
var segment = new ArraySegment<string>(a, 2, 3);
foreach (var s in segment) {
Console.WriteLine(s);
}
}
}
}
出力:
three
four
five
文字列 a
の配列を初期化し、ArraySegment
クラスのコンストラクターを使用して、a
配列のインデックス 2 から始まる 3つの要素を含むサブ配列セグメント
にスライスしました。このアプローチで配列を中央からスライスできるため、より良いアプローチです。
C# の拡張関数を使用した配列スライシング
拡張メソッドを使用すると、カスタムデータ型を宣言せずに、既存のデータ型に関数を追加できます。C# で配列をスライスするための組み込みメソッドの代わりに、ユーザー定義の拡張メソッドを定義することもできます。この拡張メソッドは、スライスの開始インデックスと終了インデックスを取得し、この範囲内のサブ配列を返すことができます。次のコード例は、C# で配列をスライスする拡張関数を定義する方法を示しています。
using System;
using System.Collections.Generic;
namespace iterate_through_a_list {
public static class Extensions {
public static T[] Slice<T>(this T[] source, int start, int end) {
if (end < 0) {
end = source.Length + end;
}
int len = end - start;
T[] res = new T[len];
for (int i = 0; i < len; i++) {
res[i] = source[i + start];
}
return res;
}
}
class Program {
static void Main(string[] args) {
string[] values = { "one", "two", "three", "four", "five" };
string[] slice = values.Slice(2, 4);
foreach (var s in slice) {
Console.WriteLine(s);
}
}
}
}
出力:
three
four
five
スライスの開始インデックスと終了インデックスを取得し、スライスされたサブ配列を返す拡張メソッド Slice()
を作成しました。文字列 values
の配列を初期化し、それを values
配列のインデックス 2
からインデックス 4
までの値を含む配列 slice
にスライスしました。
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn