2010-12-02 52 views
7

我有一個C#新手問題。以下兩點也考慮了良好的做法? ...並列出比陣列更慢或更快?使用列表數組 - 最佳實踐

 //Method 1 
     int[] i_array = { 2, 0, 110, 53455, 2223 }; 

     if (someBolean) 
     { 
      Array.Resize(ref i_array, i_array.Length + 1); 
      i_array[i_array.Length - 1] = someIntValue; 
     } 

     //Method 2 
     var i_list = new List<int>(); 
     i_list.AddRange(new int[] { 2, 0, 110, 53455, 2223 }); 

     if (someBolean) 
      i_list.Add(someIntValue); 
+1

如果你不斷調整數組的大小,不妨在方法2中使用列表。 – 2010-12-02 16:40:23

+0

我知道這很難做到,但是在學習曲線上的這個階段,不要擔心性能,直到性能成爲問題。看到這個問題http://stackoverflow.com/questions/211414/is-premature-optimization-really-the-root-of-all-evil – 2010-12-02 16:58:04

回答

5

後者被認爲是可變大小集合的最佳實踐。

根據您使用的集合類型,Framework類將在內部執行類似於您在第一個示例中所做操作的內容(除了不是用一個元素調整大小,而是以較大的大小遞增,有額外的緩衝空間來保持添加元素)。

但是,一般來說,你不想重新發明輪子。該框架提供了大量可變大小的集合類。使用它們而不是寫你自己的。

+0

謝謝。我懷疑它會增加一個更大的尺寸。我會用列表。 – GuruMeditation 2010-12-02 16:49:21

3

一個列表在內部使用一個數組,所以我期望這兩個數組的性能相同。

在使用列表進行編程時,要比使用原始數組編程時出現錯誤要困難得多,所以我更傾向於在大多數情況下使用列表。

11

當您需要可以增長或縮小的集合時使用列表。

如果知道長度並且不想更改它,請使用數組。


您可以使用collection initializers初始化列表,讓你獲得類似的語法來初始化數組:

var list = new List<int> { 2, 0, 110, 53455, 2223 }; 

if (someBoolean) 
{ 
    list.Add(someIntValue); 
} 
0

兩個風作爲IEnumerables,這樣你就可以同時進行類似的操作。 Justin Niessner表示,列表的好處是可變大小的集合。此外,調整數組的大小需要框架重新分配內存,而列表表現爲鏈接列表,只需添加或刪除集合中的元素。