Çoğu grafik dosya yöneticisi tam olarak sözlükbilimsel olarak sıralama yapmaz, bunun yerine "doğal sıralama"yı kullanır. İsimdeki sayı blokları sayı olarak yorumlanır; tamamen alfabetik terimlerle tam tersi çıksa bile, daha büyük olan sayı bloğu kazanır. Doğal sıralamanın ardındaki fikir: İnsanların çoğunlukla istediği şey, başına sıfır eklemeye gerek kalmadan "10'dan önce 9", "10'dan önce Bölüm 2"dir.
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 sayı bloğu \(9\) ilk sayı bloğu \(950\) 'dan 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 Co. benzer sıralama davranışı gösterir. CLI araçları gibi ls ve find GUI dosya yöneticilerinden farklı şekilde sıralayın. Anlambilim API'de değil dosya adlarındadır. Sürprizsiz sonuçlar istiyorsanız, kuralları tanımlayın: tutarlı ayırıcılar, dolgulu sayılar ve birimlerin net bir şekilde işlenmesi. Daha sonra “alfabetik” yeniden öngörülebilir hale gelir.