C ++では、fillを使用して配列(および他の同様のコンテナー)の値の範囲を設定できます。
例えば、
fill(number, number+n,10);
上記のコードは、配列番号の最初のn個の値を値10に設定します。
これに相当する最も近いC#は何ですか。
C ++では、fillを使用して配列(および他の同様のコンテナー)の値の範囲を設定できます。
例えば、
fill(number, number+n,10);
上記のコードは、配列番号の最初のn個の値を値10に設定します。
これに相当する最も近いC#は何ですか。
同等の方法はありませんが、同様のコードを書く方法はたくさんあります
Linq-to-Objectsクラスのメソッドは、リストの初期化に使用できるシーケンスを作成できますが、これはC++での実際の動作とは大きく異なります。
new List<char>(Enumerable.Repeat('A', 10));
new List<int>(Enumerable.Range(1, 10));
C ++は、C ++テンプレートがどのように機能するかによって、これらのことをより一般的に実現できます。C#の単純な型制約は役立ちますが、同じ柔軟性は提供されません。
存在するかどうかはわかりませんが、独自のコードを簡単に作成できます。
void Fill<T>(T[] array, int start, int count, T value)
{
for (int i = start, j = 0; j < count; i++, j++)
array[i] = value;
}
明らかにパラメータチェックがありませんが、ドリルを取得します。
直接同等のものはありませんが、2つのステップで実行できます。最初に使用Enumerable.Repeat
して、各要素に同じ値を持つ配列を作成します。次に、それを宛先アレイにコピーします。
var t = Enumerable.Repeat(value, count).ToArray();
Array.Copy(t, 0, dest, destStartIndex, count);
他の宛先コンテナの場合、に相当するものがありませんが、Array.Copy
これらを宛先として追加するのは簡単です。例:
static void Overwrite<T>(this List<T> dest, IEnumerable<T> source, int destOffset) {
int pos = destOffset;
foreach (var val in source) {
// Could treat this as an error, or have explicit count
if (pos = dest.Length) { return; }
dest[pos++] = val;
}
}