C# 配列のサブセットをメソッドに渡したいと思います。メソッドがデータを上書きするかどうかは気にしないので、コピーの作成を避けたいと思います。
これを行う方法はありますか?
ありがとう。
C# 配列のサブセットをメソッドに渡したいと思います。メソッドがデータを上書きするかどうかは気にしないので、コピーの作成を避けたいと思います。
これを行う方法はありますか?
ありがとう。
IEnumerable<T>
またはを取るようにメソッドを変更しArraySegment<T>
ます。
その後、合格できますnew ArraySegment<T>(array, 5, 2)
次のクラスを使用できます。endIndex
包括的か排他的かによって、変更が必要になる場合があることに注意してください。開始インデックスと終了インデックスではなく、開始インデックスとカウントを取るように変更することもできます。
意図的に変更可能なメソッドを追加しませんでした。特にそれらが必要な場合は、簡単に追加できます。IList
変更可能なメソッドを追加する場合は、実装することもできます。
public class Subset<T> : IReadOnlyList<T>
{
private IList<T> source;
private int startIndex;
private int endIndex;
public Subset(IList<T> source, int startIndex, int endIndex)
{
this.source = source;
this.startIndex = startIndex;
this.endIndex = endIndex;
}
public T this[int i]
{
get
{
if (startIndex + i >= endIndex)
throw new IndexOutOfRangeException();
return source[startIndex + i];
}
}
public int Count
{
get { return endIndex - startIndex; }
}
public IEnumerator<T> GetEnumerator()
{
return source.Skip(startIndex)
.Take(endIndex - startIndex)
.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
配列はサイズによって不変です (つまり、配列のサイズを変更することはできません)。したがって、元の配列の減算されたコピーのみを渡すことができます。オプションとして、元の配列とは別に 2 つのインデックスをメソッドに渡し、追加の 2 つのインデックスに基づいて操作できます。
Linq take funktion を使用して、配列から必要な数の要素を取得できます
var yournewarray = youroldarray.Take(4).ToArray();