จะล้างรายการใน C # ได้อย่างไร?


109

ฉันต้องการล้างรายการ ต้องทำอย่างไร?


34
เวลาตอบสนองที่นี่เร็วกว่าที่เคยอ่าน / ค้นหา MSDN
V4Vendetta

27
นอกจากนี้คำตอบยังหาได้ง่ายกว่า MSDN อีกด้วย
Matt Connolly

14
ไม่ต้องพูดถึงความจริงที่ว่าถ้าคุณเป็น Google .net empty listหน้านี้จะปรากฏขึ้นก่อน MSDN!
Vivian River

2
@ V4Vendetta ในปี 2018 ฉันขอแนะนำว่า StackOverflow น่าจะสร้าง Bot ที่แสดงความคิดเห็นของคุณในเธรดใด ๆ ที่มีลิงก์ไปยัง MSDN doc ในความคิดเห็น ...
scharette

คำตอบ:


234

มันง่ายมาก:

myList.Clear();

3
... ถ้ารายการเป็นจริงList<>, หรือการดำเนินการArrayList IList;)
Lucero

3
@ Lucero จะถูกเรียกว่าเป็นรายการหรือไม่ถ้าไม่ใช่ทั้งสองอย่าง?
Srinivas Reddy Thatiparthy

16
เนื่องจากนี่เป็นรายการยอดนิยมใน Google และฉันพบปัญหานี้ฉันจึงแสดงความคิดเห็นเกี่ยวกับสิ่งนี้ หากคุณใช้รายการเดียวกันในการวนซ้ำและใช้ clear รายการมักจะอ้างอิงถึงวัตถุเก่า - ฉันมักจะใช้ = new LisT <T> (); เนื่องจากการล้างการจัดสรรเก่าทั้งหมดทันที สำหรับคนส่วนใหญ่แม้ว่า. Clear (); จะพอเพียง แต่ถ้าคุณพบว่ารายการทำงานแปลก ๆ - ลองใช้ = new List <T> ();
Charles

1
ฉันจะเพิ่มความคิดเห็นเป็นสองเท่าเนื่องจากมีการให้ข้อมูลที่ผิดบางอย่างที่นี่ในปี 2020 List<T>.Clearล้างข้อมูลอ้างอิงทั้งหมดอย่างถูกต้องซึ่งทำให้ GC สามารถล้างการจัดสรรได้เมื่อจำเป็น new List<T>ไม่ทำเช่นนี้และไม่เหมาะสมในทุกสถานการณ์
John

28

ถ้าตาม "รายการ" คุณหมายถึง a List<T>แล้วเมธอดClearคือสิ่งที่คุณต้องการ:

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

คุณควรทำความคุ้นเคยกับการค้นหาเอกสาร MSDN เกี่ยวกับสิ่งเหล่านี้

ต่อไปนี้เป็นวิธีค้นหาเอกสารเกี่ยวกับบิตประเภทต่างๆอย่างรวดเร็ว:

  • List Class - จัดเตรียมList<T>คลาสเอง ( นี่คือจุดที่คุณควรเริ่ม )
  • List.Clear Method - จัดเตรียมเอกสารเกี่ยวกับวิธีการล้าง
  • List.Count Property - จัดเตรียมเอกสารเกี่ยวกับจำนวนคุณสมบัติ

คำค้นหาของ Google ทั้งหมดนี้แสดงกลุ่มของลิงก์ แต่โดยทั่วไปแล้วคุณต้องการลิงก์แรกที่ Google ให้คุณในแต่ละกรณี


"ทั้งหมดนี้แสดงรายการกลุ่มของลิงก์ แต่โดยทั่วไปแล้วคุณต้องการลิงก์แรก" เว้นเสียแต่ว่าคุณต้องการให้รายการว่างเปล่า?
ผู้ใช้

ขอโทษนะฉันน่าจะชัดเจนกว่านี้ โดยทั่วไปคุณต้องการลิงก์แรกที่ Google ให้คุณไม่ใช่ "รายการคลาส"
Lasse V.Karlsen

9

เพื่อให้คำตอบอื่น (ใครต้องการคำตอบที่เท่ากัน 5 ข้อ):

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

โปรดทราบว่าการอ้างอิงอื่น ๆ ทั้งหมดในรายการเก่ายังไม่ถูกล้าง (ขึ้นอยู่กับสถานการณ์นี่อาจเป็นสิ่งที่คุณต้องการ) นอกจากนี้ในแง่ของประสิทธิภาพมักจะช้ากว่าเล็กน้อย


คุณตรวจสอบได้หรือไม่ว่าการตั้งค่า list = new List <> () ช้ากว่า list.Clear ();? ตามรายการ MSDN (ลิงค์ด้านล่าง) Clear (); เป็นการดำเนินการ O (N) และฉันนึกไม่ถึงว่าการสร้างอินสแตนซ์รายการใหม่จะใช้เวลานานกว่านั้น msdn.microsoft.com/en-us/library/dwb5h52a(v=vs.110).aspx
Chris Tramel

5
DotNetPerls ทำเกณฑ์มาตรฐานและพบว่ารายการใหม่ <> เร็วกว่า dotnetperls.com/list-clear
Gerhard Powell

โดยส่วนขยายโปรดทราบว่า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);

Clear () และ 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);



4

คุณต้องมีฟังก์ชัน Clear () ในรายการเช่นนั้น

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

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

myList.Clear() // Our list is now empty
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.