Çoğu grafiksel dosya yöneticisi, tam anlamıyla sözlüksel sıralama yapmaz, bunun yerine "doğal" sıralama kullanır. İsimlerdeki sayı blokları sayı olarak yorumlanır; alfabetik sıralamada tersi geçerli olsa bile, daha büyük sayı bloğu kazanır. Doğal sıralamanın arkasındaki fikir: İnsanların genellikle istediği şey, "10'dan önce 9", "10. Bölüm'den önce 2. Bölüm"dür; üstelik sıfır eklemeye gerek kalmadan.
Aşağıdaki dosya çiftleri doğal olarak artan sırada şu şekilde sıralanır::
build-9e2.logbuild-950.log
Şaşırtıcı ama açıklanabilir: İlk rakam \(9\) ilk rakam bloğundan \(950\) daha küçüktür.
IMG_12113419_90.jpgIMG_0554363070_90.jpg
\(12113419\) sayısı \(554363070\) sayısından küçüktür (baştaki \(0\) kaldırılır).
temp_0C.txttemp_2C.txttemp_-3C.txttemp_10C.txttemp_-12C.txt
Karşılaştırılan sayılar \(0\) , \(2\) , \(3\) , \(10\) , \(12\) dir – “-” sayının bir parçası olarak kabul edilmez.
"Alfabetik" bile genel olarak kesin değildir: Büyük harf kullanımı, ä (Almanca) gibi çift noktalı harfler veya ch (Çekçe) gibi çok karakterli harfler meşru varyantlara yol açar. Dolayısıyla "tamamen alfabetik" bağlamsaldır. Windows Gezgini bunu StrCmpLogicalW işlevinde uygular. Kaynak kodu (shlwapi.dll) tescilli ve herkese açık olmasa da, örneğin ReactOS'tan yeniden uyarlamalar mevcuttur.:
{
TRACE("%s, %s\n", wine_dbgstr_w(str), wine_dbgstr_w(comp));
if (!str || !comp)
return 0;
while (*str)
{
if (!*comp)
return 1;
else if (*str >= '0' && *str <= '9')
{
int str_value, comp_value;
if (*comp < '0' || *comp > '9')
return -1;
/* Compare the numbers */
StrToIntExW(str, 0, &str_value);
StrToIntExW(comp, 0, &comp_value);
if (str_value < comp_value)
return -1;
else if (str_value > comp_value)
return 1;
/* Skip */
while (*str >= '0' && *str <= '9') str++;
while (*comp >= '0' && *comp <= '9') comp++;
}
else if (*comp >= '0' && *comp <= '9')
return 1;
else
{
int diff = ChrCmpIW(*str, *comp);
if (diff > 0)
return 1;
else if (diff < 0)
return -1;
str++;
comp++;
}
}
if (*comp)
return -1;
return 0;
}
Google Drive, OneDrive, KDE ve diğerleri benzer bir sıralama davranışı gösterir. ls ve find Ancak, GUI dosya yöneticilerinden farklı şekilde sıralanırlar. Anlamsallık API'de değil, dosya adlarındadır. Sürprizsiz sonuçlar istiyorsanız, kurallar belirleyin: tutarlı ayırıcılar, dolgulu sayılar ve birimlerin net bir şekilde işlenmesi. Böylece "alfabetik" tekrar öngörülebilir hale gelir.