Tüm makaleler

Satırları sıralama ve yinelenenleri kaldırma: neden işe yarar

Türkçede büyük "I"nin küçüğü "ı"dır, "i"nin büyüğü ise "İ"dir — dört farklı harf, iki çift, ve İngilizce'deki tek "I"/"i" çiftiyle örtüşmüyor. Bu yüzden standart Unicode büyük/küçük harf kurallarını kullanan "büyük/küçük harfe duyarsız" bir karşılaştırma, Türkçe metinde "İstanbul" ile "istanbul"'u aynı kabul etmeyebilir — bu, yazılım dünyasında "Turkish I problemi" olarak bilinen, gerçek ve sık karşılaşılan bir yerelleştirme hatasıdır.

Alfabetik sıralamaya karşı sayısal sıralama

Alfabetik (sözlükbilimsel) sıralama, dizeleri metin olarak karakter karakter karşılaştırır. Bu yüzden "10" dizesi "9"'dan önce gelir, çünkü "1" karakteri sözlükbilimsel olarak "9"'dan küçüktür — sıralama bunların sayı olduğunu "anlamaz". Sayısal sıralama ise dizeleri karşılaştırmadan önce sayı olarak yorumlar ve beklenen 9, 10, 11 sırasını verir.

Sıralamada büyük/küçük harf

Çoğu sistemde, büyük harfler sözlükbilimsel olarak küçük harflerden önce gelir (karakter kodlaması nedeniyle), bu yüzden büyük/küçük harfe duyarlı bir sıralamada "Zebra", "elma"'dan önce gelebilir. Büyük/küçük harfe duyarsız sıralama, önce karşılaştırma için dizeleri aynı büyüklüğe normalleştirir, ancak sonuçta orijinal büyüklüğü korur.

Yinelenenleri kaldırma

Yineleme kaldırma, tekrarlanan satırları karakter karakter karşılaştırarak kaldırır, anlamlarına göre değil. Türkçe metinlerde büyük/küçük harfe duyarsız karşılaştırma yaparken nokta sorunu özellikle önemlidir: bir araç standart Unicode kurallarını kullanıyorsa, "İ" harfini beklendiği gibi "i" ile eşleştirmeyebilir ve aslında aynı kelimenin iki satırı yinelenen olarak tespit edilmeyebilir.

Buna neden ihtiyaç duyulur

  • Bir içe aktarmadan önce e-posta adresleri veya URL'ler listesinden tekrarlanan girişleri kaldırmak.
  • Bir sürüm veya kimlik listesini metin olarak değil sayısal olarak sıralamak.
  • Her iki listeyi de aynı sıralanmış forma getirerek iki veri kümesini hızlıca karşılaştırmak.

Doğal sıralama (natural sort)

Doğal sıralama, alfabetik ve sayısal yaklaşımlar arasında bir uzlaşımdır: bir satırın içindeki rakam dizilerini sayı olarak tanır, geri kalan karakterleri ise metin olarak karşılaştırır. Bu sayede file2.txt, file10.txt'den önce gelir — teknik olarak bunlar sayı değil dize olsa da. Metin önekli dosya adları veya sürüm numaraları için kullanışlıdır.

Aracı dene