ในภาษาไทย สระบนและวรรณยุกต์ที่เกาะอยู่เหนือหรือใต้พยัญชนะ (เช่น ่ ้ ๊ ๋ ั ี ึ) เป็นอักขระ Unicode แยกต่างหากที่ต่อท้ายพยัญชนะฐาน แต่มาตรฐานไม่ได้บังคับลำดับที่แน่นอนเมื่อมีเครื่องหมายซ้อนกันหลายตัว ผลคือสองบรรทัดที่หน้าตาเหมือนกันทุกประการบนหน้าจออาจถูกพิมพ์หรือบันทึกด้วยลำดับอักขระข้างในต่างกัน ทำให้เครื่องมือลบรายการซ้ำมองว่าเป็นคนละบรรทัด ทั้งที่สายตาคนมองว่าเหมือนกัน
การเรียงตามตัวอักษรกับตามตัวเลข
การเรียงตามตัวอักษร (lexicographic) เปรียบเทียบสตริงทีละตัวอักษรเหมือนข้อความ ด้วยเหตุนี้ สตริง "10" จึงมาก่อน "9" เพราะตัวอักษร "1" มีค่าน้อยกว่า "9" ในทาง lexicographic — การเรียงลำดับไม่ "เข้าใจ" ว่านี่คือตัวเลข ในทางกลับกัน การเรียงตามตัวเลขจะแปลงสตริงเป็นตัวเลขก่อนเปรียบเทียบ ทำให้ได้ลำดับที่คาดหวังคือ 9, 10, 11
การสนใจตัวพิมพ์ใหญ่เล็กเมื่อเรียงลำดับ
ในระบบส่วนใหญ่ ตัวพิมพ์ใหญ่จะมาก่อนตัวพิมพ์เล็กในทาง lexicographic (เพราะการเข้ารหัสอักขระ) ดังนั้น "Zebra" อาจมาก่อน "apple" ในการเรียงแบบสนใจตัวพิมพ์ใหญ่เล็ก การเรียงแบบไม่สนใจตัวพิมพ์ใหญ่เล็กจะปรับสตริงให้เป็นตัวพิมพ์เดียวกันก่อนเปรียบเทียบ ในขณะที่ยังคงตัวพิมพ์เดิมไว้ในผลลัพธ์
การลบรายการซ้ำ
การลบรายการซ้ำจะเปรียบเทียบบรรทัดทีละอักขระ ไม่ได้ตัดสินจากความหมาย สำหรับข้อความไทย ปัญหาที่พบได้จริงคือลำดับของสระและวรรณยุกต์ที่ซ้อนกันในหน่วยความจำอาจไม่ตรงกันแม้จะแสดงผลเหมือนกันทุกประการ ทำให้บรรทัดที่ควรถือว่าซ้ำกลับไม่ถูกลบออก
ทำไมต้องใช้สิ่งนี้
- ลบรายการอีเมลหรือ URL ที่ซ้ำกันก่อนนำเข้าข้อมูล
- เรียงรายการเวอร์ชันหรือ ID ตามตัวเลขแทนที่จะเป็นข้อความ
- เปรียบเทียบชุดข้อมูลสองชุดอย่างรวดเร็วโดยแปลงทั้งสองรายการให้อยู่ในรูปแบบที่เรียงแล้วเหมือนกัน
การเรียงลำดับแบบธรรมชาติ (natural sort)
การเรียงลำดับแบบธรรมชาติเป็นทางเลือกกึ่งกลางระหว่างการเรียงตามตัวอักษรและตามตัวเลข: มันรู้จักลำดับตัวเลขภายในบรรทัดว่าเป็นตัวเลขจริง ๆ ส่วนอักขระที่เหลือจะเปรียบเทียบแบบข้อความตามปกติ ด้วยวิธีนี้ file2.txt จะอยู่ก่อน file10.txt แม้ในทางเทคนิคทั้งสองจะเป็นสตริง ไม่ใช่ตัวเลขโดด ๆ — มีประโยชน์กับชื่อไฟล์หรือเวอร์ชันที่มีคำนำหน้าเป็นข้อความ