簡體   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