2012-05-26 20 views
1

我想創建一個新的數組。比方說,如何在c#中定義一個等價的數組?

int[] clickNum = new int[800]; 

然後我想這樣做clickNum = 2,這將使所有數組元素從clickNum[0]開始clickNum[800],設置爲2。我知道有一種方法可以通過使用循環來完成;但我所追求的只是一種功能或方法。

回答

7

我想你可以使用Enumerable.Repeat當你初始化數組:

int[] clickNum = Enumerable.Repeat(2, 800).ToArray(); 

這當然會慢一些,但除非您打算從字面上發起百萬的元素,它會被罰款

我的機器上的一個快速基準測試顯示,使用for循環初始化1,000,000個元素花費了2ms,但使用Enumerable.Repeat花費了9ms

This page表明它可能高達20倍慢。

5

我不認爲有任何內置函數來填充現有的數組/列表。 你可以寫一個簡單的輔助方法,如果您需要在幾個地方操作:

static void Fill<T>(IList<T> arrayOrList, T value) 
{ 
    for (int i = arrayOrList.Count - 1; i >= 0; i--) 
    { 
     arrayOrList[i] = value; 
    } 
} 
+1

使用的IList的'',那麼它適用於數組和列表也。 –

+0

謝謝@TimSchmelter,相應地編輯了代碼。 – Wormbo

1

我猜你正在尋找您創建了一個功能,但你不必鍵入它的時間。所以,如果你想在單行,請嘗試:

for(int i = 0; i < clickNum.Length; i++, clickNum[i] = 2); 
1

使用Array.ConvertAll應該是更有效的,如果你是非常大的陣列和性能工作是一個問題:

int[] clickNum = Array.ConvertAll(new int[800], x => x = 2); 

你也可以使用標準的LINQ選擇是否履行不擔心你:

int[] clickNum = new int[800].Select(x => x = 2).ToArray(); 
+1

這是我最喜歡的答案,我從來沒有聽說過'Array.ConvertAll'! – Venemo

相關問題