2010-12-02 3 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, так что вы можете выполнить аналогичные операции на обоих. Преимущество Перечня заключается в том, как сказал Джастин Нисснер, коллекции с переменным размером. Кроме того, изменение размера массива потребует, чтобы инфраструктура перераспределяла память, а List ведет себя как связанный список, просто добавляя или удаляя элементы из коллекции.

Смежные вопросы