Wie leere ich eine Liste in C #?

108

Ich möchte eine Liste leeren. Wie geht das?

Olive
quelle
34
Die Antwortzeit hier ist schneller als es gewesen wäre, MSDN
V4Vendetta
27
Außerdem ist die Antwort hier jetzt leichter zu finden als bei MSDN.
Matt Connolly
14
Ganz zu schweigen von der Tatsache, dass .net empty listdiese Seite bei Google vor MSDN angezeigt wird!
Vivian River
2
@ V4Vendetta Im Jahr 2018 würde ich vorschlagen, dass StackOverflow wahrscheinlich einen Bot erstellen sollte, der Ihren Kommentar zu jedem Thread, der einen Link zu MSDN doc in den Kommentaren hat ...
scharette

Antworten:

233

Es ist wirklich einfach:

myList.Clear();
Øyvind Bråthen
quelle
3
... wenn die Liste ist eigentlich ein List<>, ArrayListoder Geräte IList. ;)
Lucero
3
@Lucero wird es als Liste aufgerufen, wenn es keine davon ist?
Srinivas Reddy Thatiparthy
16
Da dies ein Top-Hit in Google ist und ich auf dieses Problem stoße, kommentiere ich dies nekrotisch. Wenn Sie dieselbe Liste in einer Schleife verwenden und clear verwenden, wird in der Liste häufig auf alte Objekte verwiesen. Am Ende verwende ich häufig = new LisT <T> (); aufgrund der Tatsache, dass alle alten Zuordnungen sofort gelöscht werden. Für die meisten Leute jedoch .Clear (); wird ausreichen, aber wenn Sie eine Liste finden, die seltsam wirkt - versuchen Sie es mit = new List <T> ();.
Charles
1
Ich werde dies verdoppeln, da hier ab 2020 einige Fehlinformationen bereitgestellt wurden. List<T>.ClearAlle Referenzen werden ordnungsgemäß gelöscht, sodass der GC die Zuweisungen bei Bedarf löschen kann. new List<T>tut dies NICHT und ist in
John
28

Wenn Sie mit "Liste" a meinen List<T>, dann ist die Clear- Methode genau das , was Sie wollen:

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

Sie sollten es sich zur Gewohnheit machen, die MSDN-Dokumentation zu diesen Dingen zu durchsuchen.

So suchen Sie schnell nach Dokumentation zu verschiedenen Bits dieses Typs:

Alle diese Google-Abfragen enthalten ein Bündel von Links. In der Regel möchten Sie jedoch jeweils den ersten Link, den Google Ihnen zur Verfügung stellt.

Lasse V. Karlsen
quelle
"Alle diese Listen enthalten ein Bündel von Links, aber normalerweise möchten Sie den ersten." Es sei denn, Sie möchten die Liste leeren?
Ein CVn
Entschuldigung, ich hätte klarer sein sollen. Normalerweise möchten Sie den ersten Link, den Google Ihnen gibt, nicht die "Listenklasse".
Lasse V. Karlsen
9

Um eine alternative Antwort zu geben (Wer braucht 5 gleiche Antworten?):

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

Beachten Sie, dass alle anderen Verweise auf die alte Liste nicht gelöscht wurden (je nach Situation ist dies möglicherweise das, was Sie möchten). Auch in Bezug auf die Leistung ist es normalerweise etwas langsamer.

Meinersbur
quelle
Können Sie überprüfen, ob die Einstellung list = new List <> () tatsächlich langsamer ist als list.Clear ();? Laut MSDN (Link unten) list.Clear (); ist eine O (N) -Operation, und ich kann mir nicht vorstellen, dass das Instanziieren einer neuen Liste länger dauern würde. msdn.microsoft.com/en-us/library/dwb5h52a(v=vs.110).aspx
Chris Tramel
5
DotNetPerls hat einen Benchmark durchgeführt und festgestellt, dass die neue Liste <> schneller ist. dotnetperls.com/list-clear
Gerhard Powell
Denken Sie auch daran, dass listes eine neue Referenz gibt. Verwenden Sie das also nicht, wenn Sie eine Sperre für diese Liste verwenden.
Jeromej
9

Option 1: Verwenden Sie die Funktion Clear () , List<T>um die Kapazität zu leeren und beizubehalten.

  • Count wird auf 0 gesetzt, und Verweise auf andere Objekte aus Elementen der Sammlung werden ebenfalls freigegeben.

  • Die Kapazität bleibt unverändert.

Option 2 - Verwenden Sie die Funktionen Clear () und TrimExcess () , um List<T>den Ausgangszustand festzulegen .

  • Count wird auf 0 gesetzt, und Verweise auf andere Objekte aus Elementen der Sammlung werden ebenfalls freigegeben.

  • Durch das Trimmen eines Leerzeichens wird List<T>die Kapazität der Liste auf die Standardkapazität festgelegt.

Definitionen

Count = Anzahl der Elemente, die sich tatsächlich in der befindenList<T>

Kapazität = Gesamtzahl der Elemente, die die interne Datenstruktur ohne Größenänderung enthalten kann.

Nur Clear ()

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 () und 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);
Arbeite klüger
quelle
5

du kannst das tun

var list = new List<string>();
list.Clear();
Kim Tranjan
quelle
5

Sie können die Methode clear verwenden

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

Sie benötigen die Clear () - Funktion in der Liste.

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

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

myList.Clear() // Our list is now empty
Kleine Götter
quelle