วิธีการใช้ LINQ
เพื่อดึงค่าพร็อพเพอร์ตีที่ไม่ซ้ำกันจากรายการที่อยู่ในหน่วยความจำ
การทำงานกับคอลเลกชันใน C# เป็นงานที่พบบ่อย โดยเฉพาะเมื่อจัดการกับพร็อพเพอร์ตีที่แตกต่างกันของวัตถุ หนึ่งในความต้องการที่พบบ่อยคือการดึงค่าที่ไม่ซ้ำกันจากรายการอย่างมีประสิทธิภาพ ในโพสต์นี้เราจะพูดถึงคำถามทั่วไปที่นักพัฒนาหลายคนพบว่า: ฉันจะดึงอาเรย์ของค่าพร็อพเพอร์ตีที่ไม่ซ้ำกันจากรายการในหน่วยความจำโดยใช้ LINQ
ได้อย่างไร?
ความเข้าใจในปัญหา
ลองจินตนาการว่าคุณมีรายการของวัตถุที่เรียกว่า Foo
แต่ละวัตถุ Foo
มีพร็อพเพอร์ตีประเภทสตริงที่เรียกว่า Bar
และคุณต้องการรวบรวมค่าที่ไม่ซ้ำกันทั้งหมดของ Bar
จากรายการนี้ ความท้าทายคือการบรรลุสิ่งนี้โดยไม่มีความซับซ้อนเกินไป และในลักษณะที่มีประสิทธิภาพและสามารถดูแลได้
สถานการณ์
- คุณมี
List<Foo>
. - วัตถุ
Foo
แต่ละตัวมีพร็อพเพอร์ตีBar
ประเภทstring
. - คุณต้องการรับ
string[]
ที่มีเพียงค่าที่ไม่ซ้ำกันจากพร็อพเพอร์ตีBar
ของวัตถุFoo
ทั้งหมด
วิธีการแก้ปัญหา
ในการดึงค่าที่ไม่ซ้ำกันของ Bar
จากรายการวัตถุ Foo
อย่างมีประสิทธิภาพ คุณสามารถใช้พลังของ LINQ
นี่คือวิธีการ:
ใช้ LINQ เพื่อดึงค่าที่ไม่ซ้ำกัน
นี่คือวิธีที่ง่ายและสวยงามในการบรรลุเป้าหมายของคุณโดยใช้ LINQ:
var bars = Foos.Select(f => f.Bar).Distinct().ToArray();
การวิเคราะห์โค้ด
Foos.Select(f => f.Bar)
: ส่วนนี้ของโค้ดคือการแสดงออกของ lambda ที่โปรเจควัตถุFoo
แต่ละตัวไปยังพร็อพเพอร์ตีBar
ของมัน.Distinct()
: การเรียกใช้เมธอดนี้จะกรองผลลัพธ์ให้คืนค่าที่ไม่ซ้ำกันเท่านั้น ซึ่งจะทำให้เห็นค่าซ้ำถูกกำจัดออกจากการเลือก.ToArray()
: สุดท้ายToArray()
จะเปลี่ยนผลลัพธ์ประเภท IEnumerable เป็นอาเรย์ของสตริง
สิ่งที่ควรพิจารณา
- การประมวลผลเลื่อน: คำสั่ง LINQ จะไม่ถูกดำเนินการจนกว่าคุณจะใช้ผลลัพธ์ของมันอย่างชัดเจน โดยการใช้วิธีเช่น
ToArray()
หรือCount()
คุณจะทำให้คำสั่งถูกประเมิน - การเพิ่มประสิทธิภาพ: แนะนำให้สร้างคำสั่งของคุณให้สมบูรณ์ก่อนที่จะบังคับให้เกิดการประเมินโดยใช้
ToArray()
เนื่องจาก LINQ สามารถทำการเพิ่มประสิทธิภาพในระหว่างกระบวนการประมวลผล
สรุป
การใช้ LINQ ไม่เพียงแต่ทำให้กระบวนการดึงค่าพร็อพเพอร์ตีที่ไม่ซ้ำกันง่ายขึ้น แต่ยังทำให้แน่ใจว่าโค้ดของคุณสะอาดและสามารถดูแลได้โดยง่าย เมื่อคุณจัดโครงสร้างคำสั่งของคุณอย่างเหมาะสม คุณสามารถใช้ความสามารถของ LINQ เพื่อเพิ่มประสิทธิภาพได้อย่างมีประสิทธิผล
ตอนนี้ ในครั้งถัดไปที่คุณต้องการดึงค่าที่ไม่ซ้ำจากรายการใน C# คุณสามารถใช้วิธีนี้อย่างมั่นใจ!