[英]How can I assign a value to multiple array indices at once without looping?
如何在C#中为数组的几个元素设置一个值?
我有一个初始化如下的数组:
int[] array=new int[]{2,3,5,3,7,2,9}
并且我想将2号和5号索引之间的值设置为8。如何做到这一点?
好吧,如果您想变得可爱,可以创建另一个具有重复N次值的数组,然后Copy
其Copy
到该数组中:
int[] a = new int[]{2,3,5,3,7,2,9}
int[] replacement = new int[]{8, 8, 8, 8};
Array.Copy(replacement, 0, a, 1, 4);
那里没有明确的循环。 但是您可以打赌,存在一个隐式循环。
而且,如果您真的想变得可爱,可以使用LINQ创建replacement
阵列。
尽管如此,这都是学术性的。 正如其他人指出的那样,没有非循环方法可以完成您要问的事情,只是高度混淆的方法试图掩盖循环正在发生的事实。
这篇文章中有很多选择: C#中的数组切片
将所有选项设置为一个值没有魔术。 您将不得不迭代。 但是,您始终可以执行类似.Take(2)的操作,然后循环为三个位置加8,然后是.Skip(3).Take(rest)之类的东西。 只取决于数组的大小。
对于大型数组,这可能会有所帮助,但是如果您仅使用Ints或类似的东西,它将变得更加难看。 我只是重复一下。
只需将其放在一个循环中(假设您要设置第二到第五个元素):
for (int i = 1; i < 5; i++)
{
array[i] = 8;
}
对其进行迭代并设置适当的值。 没有捷径可走。
for (i=0;i<100;i++){
if(i=0)
{array[i]=2}
else{array[i]=(array[i-1]+3)}
}
我以为我会提供一种非常酷的替代方法。
int[] array = new int[] { 2,3,5,3,7,2,9 };
var segment = new ArraySegment<int>( array, 2, 5 );
for (int i = segment.Offset; i <= segment.Count; i++)
{
segment.Array[i] = 8;
}
我选择递归。
int[] array = new int[] { 2, 3, 5, 3, 7, 2, 9 };
public void caller()
{
Array8(2, 5);
}
public void Array8 (int start, int end)
{
if (start <= end)
Array8(start, --end);
array[end] = 8;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.