如何在不循环的情况下一次为多个数组索引赋值?

时间:2010-12-10 20:59:04

标签: c# arrays

如何在C#中为数组的多个元素设置一个值?

实施例

我的数组初始化如下:

int[] array=new int[]{2,3,5,3,7,2,9}

我希望将第2和第5个索引之间的值设置为8。 怎么做?

7 个答案:

答案 0 :(得分:4)

好吧,如果你想变得可爱,你可以创建另一个重复N次的数组,并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数组。

尽管如此,这都是学术性的。正如其他人所指出的那样,没有非循环的方式去做你所要求的 - 只是高度混淆的方式试图隐藏循环正在发生的事实。

答案 1 :(得分:1)

这篇文章中有很多选项:Array slices in C#

将所有选项设置为值是没有魔力的。你将不得不迭代。但是你可以总是这样做.Take(2)然后循环为三个地方添加8,然后.Skip(3)。取(休息)或其他东西。只是取决于数组的大小。

对于大型阵列,这可能会有所帮助,但如果您只使用Ints等,它将会是一个更加丑陋的代码。我会迭代。

答案 2 :(得分:1)

只需将其置于循环中(假设您要设置第二到第五个元素):

for (int i = 1; i < 5; i++)
{
    array[i] = 8;
}

答案 3 :(得分:0)

迭代它并设置适当的值。没有捷径。

答案 4 :(得分:0)

for (i=0;i<100;i++){
if(i=0)
{array[i]=2}
else{array[i]=(array[i-1]+3)}
}

答案 5 :(得分:0)

我以为我会提供一种非常酷的替代方法。

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;
}

答案 6 :(得分:0)

我选择递归。

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;
}