วิธีการใช้ LINQ เพื่อดึงค่าพร็อพเพอร์ตีที่ไม่ซ้ำกันจากรายการที่อยู่ในหน่วยความจำ

การทำงานกับคอลเลกชันใน C# เป็นงานที่พบบ่อย โดยเฉพาะเมื่อจัดการกับพร็อพเพอร์ตีที่แตกต่างกันของวัตถุ หนึ่งในความต้องการที่พบบ่อยคือการดึงค่าที่ไม่ซ้ำกันจากรายการอย่างมีประสิทธิภาพ ในโพสต์นี้เราจะพูดถึงคำถามทั่วไปที่นักพัฒนาหลายคนพบว่า: ฉันจะดึงอาเรย์ของค่าพร็อพเพอร์ตีที่ไม่ซ้ำกันจากรายการในหน่วยความจำโดยใช้ LINQ ได้อย่างไร?

ความเข้าใจในปัญหา

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

สถานการณ์

  1. คุณมี List<Foo>.
  2. วัตถุ Foo แต่ละตัวมีพร็อพเพอร์ตี Bar ประเภท string.
  3. คุณต้องการรับ string[] ที่มีเพียงค่าที่ไม่ซ้ำกันจากพร็อพเพอร์ตี Bar ของวัตถุ Foo ทั้งหมด

วิธีการแก้ปัญหา

ในการดึงค่าที่ไม่ซ้ำกันของ Bar จากรายการวัตถุ Foo อย่างมีประสิทธิภาพ คุณสามารถใช้พลังของ LINQ นี่คือวิธีการ:

ใช้ LINQ เพื่อดึงค่าที่ไม่ซ้ำกัน

นี่คือวิธีที่ง่ายและสวยงามในการบรรลุเป้าหมายของคุณโดยใช้ LINQ:

var bars = Foos.Select(f => f.Bar).Distinct().ToArray();

การวิเคราะห์โค้ด

  1. Foos.Select(f => f.Bar): ส่วนนี้ของโค้ดคือการแสดงออกของ lambda ที่โปรเจควัตถุ Foo แต่ละตัวไปยังพร็อพเพอร์ตี Bar ของมัน
  2. .Distinct(): การเรียกใช้เมธอดนี้จะกรองผลลัพธ์ให้คืนค่าที่ไม่ซ้ำกันเท่านั้น ซึ่งจะทำให้เห็นค่าซ้ำถูกกำจัดออกจากการเลือก
  3. .ToArray(): สุดท้าย ToArray() จะเปลี่ยนผลลัพธ์ประเภท IEnumerable เป็นอาเรย์ของสตริง

สิ่งที่ควรพิจารณา

  • การประมวลผลเลื่อน: คำสั่ง LINQ จะไม่ถูกดำเนินการจนกว่าคุณจะใช้ผลลัพธ์ของมันอย่างชัดเจน โดยการใช้วิธีเช่น ToArray() หรือ Count() คุณจะทำให้คำสั่งถูกประเมิน
  • การเพิ่มประสิทธิภาพ: แนะนำให้สร้างคำสั่งของคุณให้สมบูรณ์ก่อนที่จะบังคับให้เกิดการประเมินโดยใช้ ToArray() เนื่องจาก LINQ สามารถทำการเพิ่มประสิทธิภาพในระหว่างกระบวนการประมวลผล

สรุป

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

ตอนนี้ ในครั้งถัดไปที่คุณต้องการดึงค่าที่ไม่ซ้ำจากรายการใน C# คุณสามารถใช้วิธีนี้อย่างมั่นใจ!