List.IsDistinct ตรวจสอบว่า List มีค่าซ้ำหรือไม่ คืนค่า true ถ้าไม่มีตัวซ้ำเลย
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| list | list | List ที่ต้องการตรวจสอบ | |
| [equationCriteria]ไม่บังคับ | any | null | ตัวเลือกเสริมสำหรับกำหนดเกณฑ์การเปรียบเทียบ (เช่น Comparer.OrdinalIgnoreCase) |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
List.IsDistinct ตรวจสอบว่าสมาชิกทั้งหมดใน List แตกต่างกัน (ไม่ซ้ำกัน) หากไม่มีตัวซ้ำเลยจะคืนค่า true แต่มีตัวซ้ำแม้แต่ 1 คู่ก็จะคืนค่า false ฟังก์ชันนี้ยังรองรับการเปรียบเทียบแบบกำหนดเองได้ผ่านตัวเลือก equationCriteria
ที่เจ๋งคือ ผมใช้มันเพื่อตรวจสอบคุณภาพข้อมูลก่อนการประมวลผลต่อไป เช่นตรวจสอบว่า ID ในตารางซ้ำหรือไม่ มันตรงไปตรงมากว่า true/false จึงดีกว่าการนับจำนวนรายการ
ส่วนตัวผม ผมชอบใช้ List.IsDistinct ร่วมกับ Comparer.OrdinalIgnoreCase เวลาทำงานกับข้อมูลที่มีตัวพิมพ์ผสมกัน เป็นวิธีที่ลึกลับแต่มีประสิทธิภาพ 😎
ใช้ตรวจสอบคอลัมน์ที่ควรจะเป็น Primary Key (ห้ามซ้ำ) ว่ามีค่าซ้ำหลุดมาหรือไม่
ตรวจสอบว่ารายการ Input ไม่มีการป้อนข้อมูลซ้ำก่อนที่จะนำไปคำนวณต่อ
สมาชิก 1, 2, 3 ไม่ซ้ำกันเลย จึงคืนค่า true
มีเลข 3 ซ้ำกัน 2 ตัว จึงคืนค่า false
ปกติ "A" กับ "a" ถือว่าต่างกัน (Distinct) แต่เมื่อใช้ Comparer.OrdinalIgnoreCase จะถือว่าซ้ำกัน จึงคืนค่า false
List ว่างไม่มีตัวซ้ำ ดังนั้นจึงคืนค่า true (ไม่มีค่าใดที่ซ้ำกัน)
ผมอธิบายง่ายๆ List.IsDistinct คืนค่า True/False (เพื่อตรวจสอบ) ส่วน List.Distinct คืนค่าเป็น List ใหม่ที่ตัดตัวซ้ำออกแล้ว (เพื่อจัดการข้อมูล) ผมใช้ IsDistinct เมื่อต้องการแค่ตรวจสอบ
ได้ ผม List.IsDistinct({1, null, null}) ก็คืนค่า false เพราะ null ถือว่าเป็นค่าซ้ำกัน Null ที่ซ้ำกันถือเป็นการไม่ Distinct
ได้ แต่ผมแนะนำให้ใช้ equationCriteria เพื่อกำหนดว่าจะเปรียบเทียบ Field ไหนของ Record ถ้าไม่ระบุมันจะเปรียบเทียบ Record ทั้งหมด
ฟังก์ชันที่ผู้เขียนโยงไว้กับ List.IsDistinct จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
List.Count ใช้นับจำนวนสมาชิกทั้งหมดในลิสต์ (รวม null) ส่งคืนค่าตัวเลข ถ้าต้องการนับเฉพาะที่ไม่ว่างให้ใช้ List.NonNullCount แทน
List.Distinct จะคืน List ใหม่ที่ไม่มีค่าซ้ำกัน โดยเก็บสมาชิกตัวแรกที่พบไว้ และทิ้งตัวที่ซ้ำกันทิ้งไป สามารถกำหนด Comparer เพื่อใช้ Logic การเปรียบเทียบที่แตกต่างกันได้ เช่น ไม่สนใจตัวพิมพ์เล็ก/ใหญ่
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่