Jak opróżnić listę w C #?


109

Chcę opróżnić listę. Jak to zrobić?


34
Czas odpowiedzi jest tutaj szybszy niż w przypadku odczytu / wyszukiwania MSDN
V4Vendetta

27
Ponadto odpowiedź jest teraz łatwiejsza do znalezienia niż MSDN.
Matt Connolly,

14
Nie wspominając o tym, że jeśli wy Google .net empty list, ta strona pojawia się przed MSDN!
Vivian River

2
@ V4Vendetta W 2018 roku sugerowałbym, że StackOverflow powinien prawdopodobnie stworzyć bota, który umieści Twój komentarz w dowolnym wątku, który ma link do dokumentu MSDN w komentarzach ...
scharette

Odpowiedzi:


234

To naprawdę proste:

myList.Clear();

3
... jeśli lista jest rzeczywiście List<>, ArrayListczy narzędzia IList. ;)
Lucero

3
@Lucero czy można go nazwać listą, jeśli nie jest żadną z tych?
Srinivas Reddy Thatiparthy

16
Ponieważ jest to hit w Google i napotykam ten problem, komentuję to nekro. Jeśli użyjesz tej samej listy w pętli i Clear, lista często będzie zawierała odniesienia do starych obiektów - często używam = new LisT <T> (); ze względu na fakt, że natychmiast usuwa wszystkie stare alokacje. Jednak dla większości ludzi .Clear (); wystarczy, ale jeśli znajdziesz dziwną listę - spróbuj użyć = new List <T> () ;.
Charles,

1
Zamierzam to podwójnie nekrocentować, ponieważ od 2020 roku podano tu pewne błędne informacje. List<T>.ClearPrawidłowo usuwa wszystkie odniesienia, co pozwala GC wyczyścić alokacje w razie potrzeby. new List<T>NIE robi tego i jest nieodpowiedni we wszystkich scenariuszach
Jan

28

Jeśli przez „listę” masz na myśli a List<T>, to metoda Clear jest tym, czego potrzebujesz:

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

Powinieneś nabrać zwyczaju przeszukiwania dokumentacji MSDN na ten temat.

Oto jak szybko wyszukać dokumentację dotyczącą różnych bitów tego typu:

Wszystkie te zapytania Google zawierają zestaw linków, ale zazwyczaj potrzebujesz pierwszego, który Google poda w każdym przypadku.


„Wszystkie te listy zawierają zbiór linków, ale zazwyczaj potrzebujesz pierwszego”. Chyba że chcesz opróżnić listę?
CVn

Przepraszam, powinienem był wyjaśnić. Zwykle potrzebujesz pierwszego linku podanego przez Google, a nie „Klasy listy”.
Lasse V. Karlsen

9

Aby udzielić alternatywnej odpowiedzi (kto potrzebuje 5 równych odpowiedzi?):

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

Pamiętaj, że wszystkie inne odniesienia do starej listy nie zostały wyczyszczone (w zależności od sytuacji może to być to, czego chcesz). Również pod względem wydajności jest zwykle nieco wolniejszy.


Czy możesz sprawdzić, czy ustawienie list = new List <> () jest faktycznie wolniejsze niż list.Clear () ;? Zgodnie z listą MSDN (link poniżej ).Clear (); jest operacją O (N) i nie wyobrażam sobie, że utworzenie nowej listy zajęłoby więcej czasu. msdn.microsoft.com/en-us/library/dwb5h52a(v=vs.110).aspx
Chris Tramel

5
DotNetPerls wykonał test porównawczy i stwierdził, że nowa lista <> jest szybsza. dotnetperls.com/list-clear
Gerhard Powell

W związku z tym pamiętaj, że listma nowe odniesienie. Więc nie używaj tego, jeśli używasz blokady na tej liście.
jeromej

9

Opcja nr 1: Użyj funkcji Clear (), aby opróżnić List<T>i zachować pojemność.

  • Liczba jest ustawiona na 0, a odwołania do innych obiektów z elementów kolekcji są również zwalniane.

  • Pojemność pozostaje niezmieniona.

Opcja nr 2 - Użyj funkcji Clear () i TrimExcess (), aby ustawić List<T>stan początkowy.

  • Liczba jest ustawiona na 0, a odwołania do innych obiektów z elementów kolekcji są również zwalniane.

  • Przycinanie pustego ustawienia List<T>powoduje ustawienie domyślnej pojemności listy.

Definicje

Liczba = liczba elementów, które faktycznie znajdują się wList<T>

Pojemność = całkowita liczba elementów, które wewnętrzna struktura danych może pomieścić bez zmiany rozmiaru.

Tylko wyczyść ()

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);

Clear () i 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

Możesz użyć przejrzystej metody

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

4

Potrzebujesz funkcji Clear () na liście, tak jak to.

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

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

myList.Clear() // Our list is now empty
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.