如何在C#中为数组的多个元素设置一个值?
我的数组初始化如下:
int[] array=new int[]{2,3,5,3,7,2,9}
我希望将第2和第5个索引之间的值设置为8。 怎么做?
答案 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;
}