我想創建一個新的數組。比方說,如何在c#中定義一個等價的數組?
int[] clickNum = new int[800];
然後我想這樣做clickNum = 2
,這將使所有數組元素從clickNum[0]
開始clickNum[800]
,設置爲2
。我知道有一種方法可以通過使用循環來完成;但我所追求的只是一種功能或方法。
我想創建一個新的數組。比方說,如何在c#中定義一個等價的數組?
int[] clickNum = new int[800];
然後我想這樣做clickNum = 2
,這將使所有數組元素從clickNum[0]
開始clickNum[800]
,設置爲2
。我知道有一種方法可以通過使用循環來完成;但我所追求的只是一種功能或方法。
我想你可以使用Enumerable.Repeat
當你初始化數組:
int[] clickNum = Enumerable.Repeat(2, 800).ToArray();
這當然會慢一些,但除非您打算從字面上發起百萬的元素,它會被罰款。
我的機器上的一個快速基準測試顯示,使用for
循環初始化1,000,000個元素花費了2ms
,但使用Enumerable.Repeat
花費了9ms
。
This page表明它可能高達20倍慢。
我不認爲有任何內置函數來填充現有的數組/列表。 你可以寫一個簡單的輔助方法,如果您需要在幾個地方操作:
static void Fill<T>(IList<T> arrayOrList, T value)
{
for (int i = arrayOrList.Count - 1; i >= 0; i--)
{
arrayOrList[i] = value;
}
}
我猜你正在尋找您創建了一個功能,但你不必鍵入它的時間。所以,如果你想在單行,請嘗試:
for(int i = 0; i < clickNum.Length; i++, clickNum[i] = 2);
使用Array.ConvertAll應該是更有效的,如果你是非常大的陣列和性能工作是一個問題:
int[] clickNum = Array.ConvertAll(new int[800], x => x = 2);
你也可以使用標準的LINQ選擇是否履行不擔心你:
int[] clickNum = new int[800].Select(x => x = 2).ToArray();
這是我最喜歡的答案,我從來沒有聽說過'Array.ConvertAll'! – Venemo
使用的IList的'',那麼它適用於數組和列表也。 –
謝謝@TimSchmelter,相應地編輯了代碼。 – Wormbo