List.IsDistinct ตรวจสอบว่า List มีค่าซ้ำหรือไม่ คืนค่า true ถ้าไม่มีตัวซ้ำเลย
=List.IsDistinct(list as list, optional equationCriteria as any) as logical
=List.IsDistinct(list as list, optional equationCriteria as any) as logical
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| list | list | Yes | List ที่ต้องการตรวจสอบ | |
| equationCriteria | any | Optional | null | ตัวเลือกเสริมสำหรับกำหนดเกณฑ์การเปรียบเทียบ (เช่น Comparer.OrdinalIgnoreCase) |
ใช้ตรวจสอบคอลัมน์ที่ควรจะเป็น Primary Key (ห้ามซ้ำ) ว่ามีค่าซ้ำหลุดมาหรือไม่
ตรวจสอบว่ารายการ Input ไม่มีการป้อนข้อมูลซ้ำก่อนที่จะนำไปคำนวณต่อ
List.IsDistinct({1, 2, 3})=List.IsDistinct({1, 2, 3})
true
List.IsDistinct({1, 2, 3, 3})=List.IsDistinct({1, 2, 3, 3})
false
List.IsDistinct({"A", "a", "b"}, Comparer.OrdinalIgnoreCase)=List.IsDistinct({"A", "a", "b"}, Comparer.OrdinalIgnoreCase)
false
List.IsDistinct({})=List.IsDistinct({})
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 แตกต่างกัน (ไม่ซ้ำกัน) หากไม่มีตัวซ้ำเลยจะคืนค่า true แต่มีตัวซ้ำแม้แต่ 1 คู่ก็จะคืนค่า false ฟังก์ชันนี้ยังรองรับการเปรียบเทียบแบบกำหนดเองได้ผ่านตัวเลือก equationCriteria
ที่เจ๋งคือ ผมใช้มันเพื่อตรวจสอบคุณภาพข้อมูลก่อนการประมวลผลต่อไป เช่นตรวจสอบว่า ID ในตารางซ้ำหรือไม่ มันตรงไปตรงมากว่า true/false จึงดีกว่าการนับจำนวนรายการ
ส่วนตัวผม ผมชอบใช้ List.IsDistinct ร่วมกับ Comparer.OrdinalIgnoreCase เวลาทำงานกับข้อมูลที่มีตัวพิมพ์ผสมกัน เป็นวิธีที่ลึกลับแต่มีประสิทธิภาพ 😎