繁体   English   中英

如何在不循环的情况下一次将值分配给多个数组索引?

[英]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次值的数组,然后CopyCopy到该数组中:

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.

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