Як виповнити список у 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.