Як виповнити список у C #?


109

Я хочу спорожнити список. Як це зробити?


34
Час відповіді тут швидше, ніж було б для читання / пошуку MSDN
V4Vendetta

27
Плюс відповідь зараз простіше знайти тут, ніж MSDN.
Метт Конноллі

14
Не кажучи вже про те, що якщо ви Google .net empty list, ця сторінка виходить перед MSDN!
Вівіан-Рівер

2
@ V4Vendetta У 2018 році я б запропонував, що StackOverflow, мабуть, повинен створити Bot, який розмістить ваш коментар до будь-якої теми, яка має посилання на MSDN doc у коментарях ...
scharette

Відповіді:


234

Це дуже просто:

myList.Clear();

3
... якщо список насправді є List<>, ArrayListабо знаряддя IList. ;)
Лусеро

3
@Lucero це називається списком, якщо він не є одним із цих?
Шрінівас Редді Татіпарті

16
Оскільки це найкращий хіт в google, і я стикаюся з цією проблемою, я некротирую це. Якщо ви використовуєте той самий список у циклі і використовуєте чіткий, у списку часто зберігатиметься посилання на старі об’єкти - я часто закінчую використання = new LisT <T> (); через те, що він очищує всі старі виділення миттєво. Однак для більшості людей .Clear (); буде достатньо, але якщо ви знайдете список, який діє дивно, спробуйте скористатися = new List <T> () ;.
Чарльз

1
Я збираюся подвоїти це некроментування, оскільки дезінформація була надана станом на 2020 рік. List<T>.ClearНалежно очищає всі посилання, що дозволяє GC очищати сплави, коли це необхідно. new List<T>НЕ робить цього і не підходить ефективно для всіх сценаріїв
Іван

28

Якщо під "списком" ви маєте на увазі "а" List<T>, тоді метод " Очистити" - це те, що ви хочете:

List<string> list = ...;
...
list.Clear();

Вам слід ввійти в звичку шукати документацію MSDN щодо цих речей.

Ось як швидко шукати документацію на різні біти цього типу:

  • Список Class - надає сам List<T>клас ( саме тут ви повинні почати )
  • List.Clear Method - надає документацію про метод Clear
  • List.Count Properties - надає документацію щодо кількості власності

Усі ці запити Google містять список посилань, але зазвичай ви хочете перше, що надає Google у кожному випадку.


"Усі перелічені списки посилань, але зазвичай ви хочете перше." Якщо ви не хочете спорожнити список?
CVn

Вибачте, я повинен був бути більш чітким. Зазвичай ви хочете перше посилання, яке надає вам Google, а не "Список класів".
Лассе В. Карлсен

9

Щоб дати альтернативну відповідь (Кому потрібно 5 рівних відповідей?):

list.Add(5); 
// list contains at least one element now
list = new List<int>();
// list in "list" is empty now

Майте на увазі, що всі інші посилання на старий список не були очищені (залежно від ситуації, це може бути те, що ви хочете). Також з точки зору продуктивності це, як правило, трохи повільніше.


Чи можете ви перевірити, що список налаштувань = новий Список <> () насправді повільніше, ніж list.Clear () ;? Відповідно до списку MSDN (посилання нижче). Очистити (); це операція O (N), і я не можу уявити, що інстанціювання нового списку займе більше часу. msdn.microsoft.com/en-us/library/dwb5h52a(v=vs.110).aspx
Кріс Трамель

5
DotNetPerls зробив орієнтир і виявив, що новий Список <> швидший. dotnetperls.com/list-clear
Герхард Пауелл

За розширенням також майте на увазі, що listце нове посилання. Тому не використовуйте це, якщо ви використовуєте блокування у цьому списку.
jeromej

9

Варіант №1: Використовуйте функцію Clear (), щоб спорожнити List<T>та зберегти її ємність.

  • Кількість встановлена ​​на 0, а також видаються посилання на інші об'єкти з елементів колекції.

  • Ємність залишається незмінною.

Варіант №2 - Використовуйте функції Clear () та TrimExcess () для встановлення List<T>початкового стану.

  • Кількість встановлена ​​на 0, а також видаються посилання на інші об'єкти з елементів колекції.

  • Обрізання порожнього List<T>встановлює ємність списку за замовчуванням.

Визначення

Count = кількість елементів, які є насправді вList<T>

Ємність = загальна кількість елементів, яку внутрішня структура даних може вмістити без зміни розміру.

Очистити () Тільки

List<string> dinosaurs = new List<string>();    
dinosaurs.Add("Compsognathus");
dinosaurs.Add("Amargasaurus");
dinosaurs.Add("Deinonychus");
Console.WriteLine("Count: {0}", dinosaurs.Count);
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
dinosaurs.Clear();
Console.WriteLine("\nClear()");
Console.WriteLine("\nCount: {0}", dinosaurs.Count);
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);

Очистити () і TrimExcess ()

List<string> dinosaurs = new List<string>();
dinosaurs.Add("Triceratops");
dinosaurs.Add("Stegosaurus");
Console.WriteLine("Count: {0}", dinosaurs.Count);
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
dinosaurs.Clear();
dinosaurs.TrimExcess();
Console.WriteLine("\nClear() and TrimExcess()");
Console.WriteLine("\nCount: {0}", dinosaurs.Count);
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);


5

Можна скористатися чітким методом

List<string> test = new List<string>();
test.Clear();

4

Вам потрібна функція Clear () у списку, як-от так.

List<object> myList = new List<object>();

myList.Add(new object()); // Add something to the list

myList.Clear() // Our list is now empty
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.