[英]What is C# Equivalent to C++ STL fill method
在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;
}
显然缺少参数检查,但是您可以进行练习。
没有直接等效项,但是您可以分两步完成。 首先使用Enumerable.Repeat
创建一个在每个元素中具有相同值的数组。 然后将其复制到目标数组:
var t = Enumerable.Repeat(value, count).ToArray();
Array.Copy(t, 0, dest, destStartIndex, count);
对于其他目标容器,缺少Array.Copy
的等效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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.