Недавно случайно заметил, что Windows Explorer (по крайней мере в Windows Server 2003) сортирует файлы не в лексикографическом порядке, а в "человеческом". Алгоритма не знаю, но вот на картинке всё видно...
Правда красиво?
Здравствуйте, fddima, Вы писали:
F>Недавно случайно заметил, что Windows Explorer (по крайней мере в Windows Server 2003) сортирует файлы не в лексикографическом порядке, а в "человеческом". Алгоритма не знаю, но вот на картинке всё видно... F>Правда красиво?
Здравствуйте, fddima, Вы писали:
F>Недавно случайно заметил, что Windows Explorer (по крайней мере в Windows Server 2003) сортирует файлы не в лексикографическом порядке, а в "человеческом". Алгоритма не знаю, но вот на картинке всё видно... F>Правда красиво?
Отвратительно. Попробуй подсунуть ей шестнадцатеричные, знаковые и/или дробные числа (скажем, номера версий).
Здравствуйте, fddima, Вы писали:
F>Недавно случайно заметил, что Windows Explorer (по крайней мере в Windows Server 2003) сортирует файлы не в лексикографическом порядке, а в "человеческом". Алгоритма не знаю, но вот на картинке всё видно... F>Правда красиво?
Я уже нарвался на эту "красоту". Больше не хочу.
Здравствуйте, Centaur, Вы писали:
C>Отвратительно. Попробуй подсунуть ей шестнадцатеричные, знаковые и/или дробные числа (скажем, номера версий).
Windows Explorer:
test-1.0.12
test-1.2.09
test-1.3.222
test-1.10.5
Обычная:
test-1.0.12
test-1.10.5
test-1.2.09
test-1.3.222
ы?
Шестнадцатеричные подсовывать не буду, не вижу необходимости называть так файлы.
Возможно идиотский вопрос: а это не сортировка по дате для этих (тестовых) фолдеров, т.е. как бы просто unsorted? Как там называется такая "человеческая" сортировка?
Здравствуйте, goto, Вы писали:
G>Возможно идиотский вопрос: а это не сортировка по дате для этих (тестовых) фолдеров, т.е. как бы просто unsorted? Как там называется такая "человеческая" сортировка?
Незнаю как называется. Да нет, сортировка по полю Name. Там же ж такой треугольничек стоит.
Да и сортировка по дате это не unsorted. В неотсортированном списке всё зависит от того как бог в каталог информацию о файле положит.
goto wrote: > Возможно идиотский вопрос: а это не сортировка по дате для этих > (тестовых) фолдеров, т.е. как бы просто unsorted? Как там называется > такая "человеческая" сортировка?
Это сортировка следующим образом: имя файла разбивается на обычные
символы и числа, после чего каждое число притворяется единым символом
для лексикографической сортировки.
по дате — это не unsorted, конечно. Я имел в виду, что можно было создать тестовые директории именно в таком порядке, и они почти наверняка показались бы так без сортировки. Мой вопрос же был "идиоткий".
Такая сортировка — гут. Постоянно имею дело с большим кол-вом нумерованных файлов из разных софтов, иногда приходится ковыряться в них Explorer'ом, и если софт не вставил в номер "leading"-нули, то чисто строковая сортировка неудобна. Не зря же существует очень большое кол-во программок-ренэймеров.
Здравствуйте, fddima, Вы писали:
F>Здравствуйте, Centaur, Вы писали:
C>>Отвратительно. Попробуй подсунуть ей шестнадцатеричные, знаковые и/или дробные числа (скажем, номера версий). F>Windows Explorer: F>
Когда я сортирую версии 3.0, 3.14159265358979323846 и 3.2, я ожидаю, что они пойдут именно в этом порядке.
F>Шестнадцатеричные подсовывать не буду, не вижу необходимости называть так файлы.
А я где-то видел, как приводили пример сортировки каталогов, названных по годам. 310BC, 1917AD. Это, с одной стороны, пример знаковых чисел в нетрадиционной записи, а с другой стороны — их можно было бы принять за шестнадцатеричные.
Вот, а с третьей стороны, должен ли алгоритм сортировки распознавать даты и ставить 09.05.1945 раньше 01.01.2001? А римские цифры? А "eleven", "двенадцать" и "juu-san"? А игнорировать the в начале названия? Если нет, то почему, а если да, то почему и как?
Решение сортировать беззнаковые целые числа в десятичной записи поднимает кучу вопросов про знаковые, дробные, недесятичные, и не-совсем-числа-но-тоже-упорядоченные-множества. Это лишняя сложность и отсутствие прозрачности.
Я предпочитаю называть файлы так, чтобы они естественно сортировались независимо от алгоритма. Это значит — test-012 (если остальные номера не больше 999), test-2006-08-02 (с датами), и test-1.03.222 (если остальные версии имеют два знака во второй части и предполагается, что 3 < 10).
Здравствуйте, fddima, Вы писали:
F>Недавно случайно заметил, что Windows Explorer (по крайней мере в Windows Server 2003) сортирует файлы не в лексикографическом порядке, а в "человеческом". Алгоритма не знаю, но вот на картинке всё видно... F>Правда красиво?
Здравствуйте, Centaur, Вы писали:
C>Вот, а с третьей стороны, должен ли алгоритм сортировки распознавать даты и ставить 09.05.1945 раньше 01.01.2001? А римские цифры? А "eleven", "двенадцать" и "juu-san"? А игнорировать the в начале названия? Если нет, то почему, а если да, то почему и как?
C>Решение сортировать беззнаковые целые числа в десятичной записи поднимает кучу вопросов про знаковые, дробные, недесятичные, и не-совсем-числа-но-тоже-упорядоченные-множества. Это лишняя сложность и отсутствие прозрачности.
А должен ли он печь пироги и варить кофе? Пол мыть?
Что за чепуха про даты и т.п.? У нас есть два алгоритма: стандартный посимвольный и natural order. Сравниваем один с другим по твоим критериям:
— даты ни один из них не может правильно сортировать
— римские тоже
— eleven тоже
— the тоже
зато обычные цифры natural order сортирует куда лучше. Какие ещё претензии к алгоритму?
Здравствуйте, Centaur, Вы писали:
C>Когда я сортирую версии 3.0, 3.14159265358979323846 и 3.2, я ожидаю, что они пойдут именно в этом порядке.
Ну а я всё таки ожидаю что 3.14 < 3.2. Ну так уж я приучился.
Хотя это ведь всё зависит от того как рассматривать компоненты версии... Всё таки совершенно не очевидно что 3.2.10, это тоже что и 3.200.1, поэтому и проще каждую компоненту воспринимать как число, тем более что сейчас везде так и используется.
C>Вот, а с третьей стороны, должен ли алгоритм сортировки распознавать даты и ставить 09.05.1945 раньше 01.01.2001? А римские цифры? А "eleven", "двенадцать" и "juu-san"? А игнорировать the в начале названия? Если нет, то почему, а если да, то почему и как? C>Решение сортировать беззнаковые целые числа в десятичной записи поднимает кучу вопросов про знаковые, дробные, недесятичные, и не-совсем-числа-но-тоже-упорядоченные-множества. Это лишняя сложность и отсутствие прозрачности.
Какая-то жуткая специфика.
C>Я предпочитаю называть файлы так, чтобы они естественно сортировались независимо от алгоритма. Это значит — test-012 (если остальные номера не больше 999), test-2006-08-02 (с датами), и test-1.03.222 (если остальные версии имеют два знака во второй части и предполагается, что 3 < 10).
test-2006-08-02 в такой форме нормально и сортируются. В обычном нашем порядке — да.
Здравствуйте, fddima, Вы писали:
F>Здравствуйте, Centaur, Вы писали:
C>>Когда я сортирую версии 3.0, 3.14159265358979323846 и 3.2, я ожидаю, что они пойдут именно в этом порядке. F> Ну а я всё таки ожидаю что 3.14 < 3.2. Ну так уж я приучился.
Это одно и то же. Natural order поставит 3.14 после 3.2, я проверял.
C>>Вот, а с третьей стороны, должен ли алгоритм сортировки распознавать даты и ставить 09.05.1945 раньше 01.01.2001? А римские цифры? А "eleven", "двенадцать" и "juu-san"? А игнорировать the в начале названия? Если нет, то почему, а если да, то почему и как? C>>Решение сортировать беззнаковые целые числа в десятичной записи поднимает кучу вопросов про знаковые, дробные, недесятичные, и не-совсем-числа-но-тоже-упорядоченные-множества. Это лишняя сложность и отсутствие прозрачности. F> Какая-то жуткая специфика.
Здравствуйте, Centaur, Вы писали:
C>Здравствуйте, fddima, Вы писали:
F>>Здравствуйте, Centaur, Вы писали:
C>>>Когда я сортирую версии 3.0, 3.14159265358979323846 и 3.2, я ожидаю, что они пойдут именно в этом порядке. F>> Ну а я всё таки ожидаю что 3.14 < 3.2. Ну так уж я приучился. C>Это одно и то же. Natural order поставит 3.14 после 3.2, я проверял.
Я тоже проверял. Я просто опечатался. Я имел ввиду больше, а не меньше.
F>> Какая-то жуткая специфика. C>Не более жуткая, чем натуральные числа.
Но вполне адекватная так же как и даты. Я вот некоторые данные сохраняю в каталогах с нумерацией... причём даты тоже подошли бы, но честно говоря лень их писать, да еще писать в обратном порядке что бы нормально сортировались.
PS: И вообще-то я не собирался тут спорить как лучше, мне показалось это удобным, и захотел обратить на это внимание. А как правильно нумеровать версии и стоит ли это делать вообще — это вопрос совсем даже не сюда.
Здравствуйте, Кодёнок, Вы писали:
Кё>Что за чепуха про даты и т.п.? У нас есть два алгоритма: стандартный посимвольный и natural order. Сравниваем один с другим по твоим критериям:
Кё>- даты ни один из них не может правильно сортировать Кё>- римские тоже Кё>- eleven тоже Кё>- the тоже
Кё>зато обычные цифры natural order сортирует куда лучше.
Это субъективно. Вот отрывок из списка тестовых файлов моего текущего проекта:
На каждой картинке — транспортное средство, а в имени файла — его государственный номер. Ничего общего с натуральными числами эти номера не имеют, кроме того, что местами используют цифры. И я, и мои коллеги, когда ищут в списке такой номер, ожидают его увидеть в том месте, где он должен быть согласно ASCII-сортировке.
Кё>Какие ещё претензии к алгоритму?
Претензии те, что он непомерно усложняется ради единственного частного случая сомнительной полезности. Принцип DWIM никого до добра не доводил.
Здравствуйте, fddima, Вы писали:
F> Но вполне адекватная так же как и даты. Я вот некоторые данные сохраняю в каталогах с нумерацией... причём даты тоже подошли бы, но честно говоря лень их писать, да еще писать в обратном порядке что бы нормально сортировались.
Я приучил себя писать даты в стандартном формате ISO ещё в средней школе, когда не знал ни того, что это стандартный формат ISO, ни что такое ISO вообще. Просто потому, что это логично — ставить старшие единицы вперёд младших, точно так же, как часы перед минутами или тысячи перед сотнями.
Что касается лени, то настоятельно рекомендую её побороть. Потому что у одного моего знакомого «некоторые данные» называются old, new, !new, !!new и !!new^2 (В частности, отсюда правило: ни в одном названии не должно присутствовать слово new. Потому что через две недели оно станет old, а переименовывать будет влом или нельзя.)