2010-12-02 55 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表示,列表的好处是可变大小的集合。此外,调整数组的大小需要框架重新分配内存,而列表表现为链接列表,只需添加或删除集合中的元素。