Bagaimana cara mengosongkan daftar di C #?

109

Saya ingin mengosongkan daftar. Bagaimana cara melakukannya?

Zaitun
sumber
34
Waktu respons di sini lebih cepat daripada saat membaca / menelusuri MSDN
V4Vendetta
27
Ditambah jawabannya sekarang lebih mudah ditemukan di sini daripada MSDN.
Matt Connolly
14
Belum lagi fakta bahwa jika Anda Google .net empty list, halaman ini muncul sebelum MSDN!
Sungai Vivian
2
@ V4Vendetta Pada tahun 2018, saya menyarankan agar StackOverflow mungkin membuat Bot yang meletakkan komentar Anda di utas mana pun yang memiliki tautan ke dokumen MSDN di komentar ...
scharette

Jawaban:

234

Sangat mudah:

myList.Clear();
Øyvind Bråthen
sumber
3
... jika daftar sebenarnya List<>, ArrayListatau alat IList. ;)
Lucero
3
@ Lucero apakah itu disebut sebagai daftar jika bukan keduanya?
Srinivas Reddy Thatiparthy
16
Karena ini adalah hit teratas di google dan saya mengalami masalah ini, saya necro mengomentari ini. Jika Anda menggunakan daftar yang sama dalam satu lingkaran dan menggunakan clear, daftar akan sering menyimpan referensi ke objek lama - saya sering berakhir menggunakan = new LisT <T> (); karena fakta bahwa itu menghapus semua alokasi lama secara instan. Bagi kebanyakan orang, .Clear (); sudah cukup, tetapi jika Anda menemukan daftar yang bertingkah aneh - coba gunakan = new List <T> () ;.
Charles
1
Saya akan menggandakan permintaan ini karena beberapa informasi yang salah telah diberikan di sini mulai tahun 2020. List<T>.Clearmenghapus semua referensi dengan benar yang memungkinkan GC untuk menghapus allocs bila diperlukan. new List<T>TIDAK melakukan ini dan tidak cocok secara efektif dalam semua skenario
Yohanes
28

Jika yang Anda maksud dengan "daftar" adalah a List<T>, maka metode Hapus adalah yang Anda inginkan:

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

Anda harus membiasakan diri mencari dokumentasi MSDN tentang hal-hal ini.

Berikut ini cara mencari dokumentasi dengan cepat pada berbagai bit jenis itu:

Semua kueri Google ini mencantumkan bundel tautan, tetapi biasanya Anda menginginkan yang pertama yang diberikan Google kepada Anda dalam setiap kasus.

Lasse V. Karlsen
sumber
"Semua ini mencantumkan sekumpulan tautan, tetapi biasanya Anda menginginkan yang pertama." Kecuali Anda ingin mengosongkan daftar?
CVn
Maaf, saya seharusnya lebih jelas. Anda biasanya menginginkan tautan pertama yang diberikan Google kepada Anda, bukan "Kelas Daftar".
Lasse V. Karlsen
9

Untuk memberikan jawaban alternatif (Siapa yang butuh 5 jawaban yang sama?):

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

Ingatlah bahwa semua referensi lain ke daftar lama belum dihapus (tergantung situasinya, ini mungkin yang Anda inginkan). Selain itu, dalam hal performa, biasanya sedikit lebih lambat.

Meinersbur
sumber
Dapatkah Anda memverifikasi bahwa daftar pengaturan = Daftar baru <> () sebenarnya lebih lambat daripada daftar.Clear () ;? Menurut MSDN (tautan dibawah) list.Clear (); adalah operasi O (N), dan saya tidak bisa membayangkan membuat contoh daftar baru akan memakan waktu lebih lama dari itu. msdn.microsoft.com/en-us/library/dwb5h52a(v=vs.110).aspx
Chris Tramel
5
DotNetPerls melakukan benchmark dan menemukan bahwa List <> baru lebih cepat. dotnetperls.com/list-clear
Gerhard Powell
Selain itu, perhatikan juga bahwa listmemiliki referensi baru. Jadi jangan gunakan itu jika Anda menggunakan kunci di daftar itu.
jeromej
9

Opsi # 1: Gunakan fungsi Clear () untuk mengosongkan List<T>dan mempertahankan kapasitasnya.

  • Hitungan disetel ke 0, dan referensi ke objek lain dari elemen koleksi juga dirilis.

  • Kapasitas tetap tidak berubah.

Opsi # 2 - Gunakan fungsi Clear () dan TrimExcess () untuk mengatur List<T>ke status awal.

  • Hitungan disetel ke 0, dan referensi ke objek lain dari elemen koleksi juga dirilis.

  • Memangkas yang kosong akan List<T>menyetel kapasitas List ke kapasitas default.

Definisi

Hitung = jumlah elemen yang sebenarnya ada diList<T>

Kapasitas = jumlah total elemen yang dapat disimpan struktur data internal tanpa mengubah ukurannya.

Hapus () Saja

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 () dan 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);
WorkSmarter
sumber
5

kamu bisa melakukannya

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

Anda dapat menggunakan metode yang jelas

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

Anda memerlukan fungsi Clear () pada daftar, seperti itu.

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

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

myList.Clear() // Our list is now empty
Smallgods
sumber