C # 'da bir liste nasıl boşaltılır?


109

Listeyi boşaltmak istiyorum. Bu nasıl yapılır?


34
Buradaki yanıt süresi, MSDN
V4Vendetta'yı

27
Ayrıca yanıtı burada bulmak, MSDN'den daha kolay.
Matt Connolly

14
Google iseniz .net empty list, bu sayfanın MSDN'den önce gelmesinden bahsetmiyorum bile !
Vivian River

2
@ V4Vendetta 2018'de, StackOverflow'un muhtemelen yorumlarınızı MSDN
belgesine

Yanıtlar:


234

Gerçekten çok kolay:

myList.Clear();

3
... Bu liste aslında bir ise List<>, ArrayListya uygular IList. ;)
Lucero

3
@Lucero, bunlardan hiçbiri değilse liste olarak adlandırılır mı?
Srinivas Reddy Thatiparthy

16
Bu, google'da en iyi hit olduğundan ve bu sorunla karşılaştığım için, bunu yorumluyorum. Aynı listeyi bir döngüde kullanırsanız ve temiz kullanırsanız, liste genellikle eski nesnelere atıfta bulunur - genellikle = new LisT <T> (); tüm eski tahsisleri anında temizlediği için. Çoğu insan için .Clear (); yeterli olacaktır, ancak garip davranan bir liste bulursanız - = new List <T> (); kullanmayı deneyin.
Charles

1
Bunu iki katına çıkaracağım çünkü 2020 itibariyle burada bazı yanlış bilgiler sağlanmıştır. Gerektiğinde GC'nin allocsları List<T>.Cleartemizlemesini sağlayan tüm referansları düzgün bir şekilde temizler. new List<T>bunu YAPMAZ ve fiilen tüm senaryolara uygun değildir
John

28

"Liste" ile a'yı kastediyorsanız List<T>, Clear yöntemi istediğiniz şeydir:

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

Bunlarla ilgili MSDN belgelerinde arama yapma alışkanlığı edinmelisiniz.

İşte bu türdeki çeşitli bitlerle ilgili belgeleri nasıl hızlı bir şekilde arayacağınız:

Tüm bu Google sorguları bir bağlantı demeti listeler, ancak genellikle Google'ın her durumda size verdiği ilk soruyu istersiniz.


"Bunların tümü bir grup bağlantı listeler, ancak genellikle ilkini istersiniz." Listeyi boşaltmak istemiyorsan?
CVn

Üzgünüm, daha net olmalıydım. Genellikle Google'ın size verdiği ilk bağlantıyı istersiniz, "Liste Sınıfı" değil.
Lasse V.Karlsen

9

Alternatif bir cevap vermek için (Kimin 5 eşit yanıta ihtiyacı var?):

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

Eski listeye yapılan diğer tüm referansların temizlenmediğini unutmayın (duruma bağlı olarak, istediğiniz şey bu olabilir). Ayrıca performans açısından genellikle biraz daha yavaştır.


List = new List <> () ayarının aslında list.Clear (); 'den daha yavaş olduğunu doğrulayabilir misiniz? MSDN'ye göre (aşağıdaki bağlantı) list.Clear (); bir O (N) işlemidir ve yeni bir listenin somutlaştırılmasının bundan daha uzun süreceğini hayal edemiyorum. msdn.microsoft.com/en-us/library/dwb5h52a(v=vs.110).aspx
Chris Tramel

5
DotNetPerls bir kıyaslama yaptı ve yeni List <> 'in daha hızlı olduğunu buldu. dotnetperls.com/list-clear
Gerhard Powell

Uzantı olarak, listyeni bir referansa sahip olduğuna da dikkat edin . Bu yüzden, bu listede bir kilit kullanıyorsanız bunu kullanmayın.
jeromej

9

Seçenek 1: Boşaltmak ve kapasitesini korumak için Clear () işlevini kullanın List<T>.

  • Sayım 0 olarak ayarlanır ve koleksiyonun öğelerinden diğer nesnelere başvurular da serbest bırakılır.

  • Kapasite değişmeden kalır.

Seçenek # 2 - Başlangıç ​​durumuna ayarlamak için Clear () ve TrimExcess () işlevlerini kullanın List<T>.

  • Sayım 0 olarak ayarlanır ve koleksiyonun öğelerinden diğer nesnelere başvurular da serbest bırakılır.

  • Bir boşluğun kırpılması, Listenin List<T>kapasitesini varsayılan kapasiteye ayarlar.

Tanımlar

Sayı = gerçekte içinde bulunan öğelerin sayısıList<T>

Kapasite = dahili veri yapısının yeniden boyutlandırmadan tutabileceği toplam öğe sayısı.

Yalnızca () Temizle

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

Temizle () ve 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

Temiz yöntemi kullanabilirsiniz

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

4

Listede Clear () fonksiyonuna ihtiyacınız var, bunun gibi.

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

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

myList.Clear() // Our list is now empty
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.