Көпчүлүк графикалык файл менеджерлери лексикографиялык жактан так эмес, “табигый сортту” колдонушат. Аталышындагы сандардын блоктору сандар катары чечмеленет - алфавиттик терминдер боюнча карама-каршы келсе дагы, чоңураак сан блогу жеңет. Табигый сорттоо идеясы: Адамдар эң көп каалаган нерсе - алдыңкы нөлдөрдү кошпостон, "10го чейин 9", "10-бөлүмгө чейин 2-бөлүм".
Төмөнкү файл жуптары табигый түрдө төмөнкүдөй өсүү тартибинде иреттелген:
build-9e2.logbuild-950.log
Таң калыштуусу, бирок түшүндүрүүгө болот: биринчи орундуу блок \(9\) биринчи орундуу блок \(950\) кичине.
IMG_12113419_90.jpgIMG_0554363070_90.jpg
\(12113419\) саны \(554363070\) азыраак (башкы \(0\) алынып салынган).
temp_0C.txttemp_2C.txttemp_-3C.txttemp_10C.txttemp_-12C.txt
Салыштырылган сандар \(0\) , \(2\) , \(3\) , \(10\) , \(12\) – “-” сандын бир бөлүгү болуп эсептелбейт.
Жада калса "алфавиттик" да глобалдуу түрдө бир мааниге ээ эмес: баш тамгалар, ä (немецче) сыяктуу умлауттар же ch (чех) сыяктуу көп белгиден турган тамгалар мыйзамдуу варианттарга алып келет. Демек, "таза алфавиттик" контекстке көз каранды. Windows Explorer муну StrCmpLogicalW функциясында ишке ашырат. Анын баштапкы коду (shlwapi.dll) ачык эмес, менчик болуп саналат, бирок, мисалы, ReactOS'тун реимплементтери бар.:
{
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 жана ушул сыяктуу кызматтар окшош сорттоо жүрүм-турумун көрсөтөт. CLI куралдары сыяктуу... ls жана find GUI файл менеджерлерине караганда башкача сорттоо. Семантика API эмес, файл аталыштарында. Эгер сиз күтүлбөгөн жыйынтыктарды кааласаңыз, конвенцияларды аныктаңыз: ырааттуу бөлгүчтөр, толтурулган сандар жана бирдиктерди так иштетүү. Андан кийин "алфавиттик" кайра алдын ала болуп калат.