繁体   English   中英

什么是C#等效于C ++ STL填充方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM