Как должна работать естественная сортировка, если в наборе строк можно идентифицировать несколько числовых последовательностей? - PullRequest
1 голос
/ 19 апреля 2011

Так называемая естественная сортировка предназначена для решения следующей проблемы: когда пользователи ожидают

file1.txt
file2.txt
file3.txt
file10.txt
file11.txt

вместо "обычной" сортировки получается:

file1.txt
file10.txt
file11.txt
file2.txt
file3.txt

что неудобно и не "естественно".

Теперь мы недавно столкнулись с ситуацией, когда пользователи жаловались на эту же проблему, и мы решили использовать естественную сортировку. Однако возникла следующая проблема. Рассмотрим следующий набор строк:

file1file100.txt
file2file99.txt
...
file99file2.txt
file100file1.txt

, в котором имеется несколько идентифицируемых числовых последовательностей, и эти последовательности противоположны друг другу. Как естественная сортировка должна иметь дело с такими наборами (я имею в виду, каким должен быть результат, а не как это реализовать)?

Ответы [ 4 ]

6 голосов
/ 19 апреля 2011

Тот, кто на первом месте, несомненно, выигрывает.

Обычная сортировка лексикографически сортирует имена файлов в виде последовательностей символов (ну, возможно, с особой обработкой расширений файлов, хотя это может быть реализовано простым порядком . первым среди символов): 'f', 'i', 'l', 'e', '1', 'f', 'i', 'l', 'e', '1', '0', '0'.

Естественная сортировка лексикографически сортирует имена файлов как последовательности токенов, где каждый токен является либо символом, либо числом: 'f', 'i', 'l', 'e', 1, 'f', 'i', 'l', 'e', 100. Сравнение между символами - это нормальный порядок символов, сравнение между числами - это обычный целочисленный порядок, а сравнение между символом и числом ставит числа перед любым символом (кроме .). Наконец, вам нужно разорвать связь между file1 и file01, поэтому «числа» - это не просто числа, им нужно «знать» свое первоначальное представление на случай, если оно зашло так далеко.

Я бы вообще-то не советовал спрашивать пользователей. Если у них действительно сильное мнение о том, как они хотят, чтобы их файлы были отсортированы, тогда ОК, достаточно справедливо. В противном случае они могут не знать точно, чего они «должны» ожидать, поэтому для аналитика / программиста имеет больше смысла выяснять, что «нормально», чем для пользователя. Конечно, вы можете «спросить» их косвенно с помощью юзабилити-тестирования, если это достаточно большая сделка, чтобы того стоить. Я считаю, что если вы задаете пользователям неправильные вопросы, они чувствуют необходимость угадывать ответы, и нет смысла кодировать что-то произвольное только потому, что это то, о чем думал пользователь на месте.

Независимо от того, что пользователи думают, что правила должны быть такими, скорее всего, они действительно получат лучшее, независимо от того, что их ОС делает по умолчанию при перечислении файлов в своем файловом менеджере, файловых диалогах и подобных вещах. Поэтому я бы предложил им это (или, может быть, ближе всего к тому, что я могу написать, не тратя много их денег на мелкие крайние случаи), и если они все еще недовольны, выясните, почему.

2 голосов
/ 19 апреля 2011

Я сомневаюсь, что есть «правильный» ответ.

Лично для меня «естественная» вещь - это сортировка по первому встроенному номеру, разрыв связи с использованием второго и т. Д.

Однако, поскольку ваши ожидания имеют значение, а не мои, возможно, стоит спросить их.

1 голос
/ 20 апреля 2011

С вашими примерами я бы посчитал естественным думать об этих именах файлов как о последовательности:

<non numeric chars> <numeric chars> <non numeric chars2> <numeric chars2> "." <extension of chars>

Разделите каждый файл на эти 6 разделов и отсортируйте файлы по всем полям, причем самое левое поле является наиболее значимым.

Примечание: в отличие от хорошего ответа Стива Джессопса, при сортировке следует учитывать последовательности нечисловых или числовых символов в целом.

Кажется наиболее естественным, что результат должен быть таким, как вы его видите - с крайним левым числовым полем, задающим общий порядок - в конце концов мы привыкли к тому, что крайняя левая цифра в цифрах является самой значительной; и самое левое число в выпусках программного обеспечения является наиболее значимым.

1 голос
/ 19 апреля 2011

Я бы ожидал строго левый-правый порядок с отсортированными числами, как если бы к ним был добавлен достаточный префикс 0.Я бы попытался спорить / убеждать пользователей, которые думают иначе, подчеркивая простоту / универсальность правила.

...