Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];

Вниз

Лексикографическая сортировка?!   Найти похожие ветки 

 
DillerXX ©   (2009-06-15 00:23) [0]

Создаём файлы/папки в пустой папке, имена: 20, 333, 4, aaa, ab. И о чудо, сортировке по имени, порядок будет такой: 4, 20, 333, aaa, ab. Т.е. не лексикографически, или точнее с невыполняющимся правилом лексикографичности для цифр. Только что заметил, вот. Всегда считал что Total Commander и Explorer цифры сотируются с тем же принципом что и буквы.


 
Zeqfreed ©   (2009-06-15 00:28) [1]

А как же сериалы тогда смотреть? А так серии всегда по-порядку идут.


 
Andy BitOff ©   (2009-06-15 00:30) [2]

Total Commander так сортирует с версии, помоему 6 и опция есть в настройках как сортировать.
Винда тоже не так давно начала так сортировать.


 
oldman ©   (2009-06-15 00:34) [3]


> правилом лексикографичности для цифр


А он их считает буквами


 
Styx   (2009-06-15 00:39) [4]


> А он их считает буквами

Как раз нет, начиная с Vistы, кажись.


 
DillerXX ©   (2009-06-15 00:45) [5]

В ХР тоже "неправильная" сортировка. Я не понял про серии... Серии обычно нумерую 01, 02..


 
oldman ©   (2009-06-15 00:54) [6]


> Серии обычно нумерую 01, 02


Ессно, если имена одной длины и сортирует правильно.


> Создаём файлы/папки в пустой папке, имена: 20, 333, 4, aaa,
>  ab. И о чудо, сортировке по имени, порядок будет такой:
>  4, 20, 333, aaa, ab.


А попробуй 020, 333, 004, ааа, 0ab
:)))


 
palva ©   (2009-06-15 01:03) [7]

Хорошая сортировка встроена в PHP. natsort называется. Она сортирует строки, но выделяет внутри строки последовательности цифр. В результате каждая строка распадается на поля строкового и числового типов, которые чередуются по типу. Строковые поля сортируются лексикографичски, числовые по величине. Общая сортировка ведется по старшинству полей слева направо. Получается как-то так:
file4.txt
file33.txt
file22a2.txt
file22a11.txt


 
Palladin ©   (2009-06-15 08:47) [8]

Удалено модератором


 
Sha ©   (2009-06-15 09:50) [9]

> palva ©   (15.06.09 01:03) [7]
интересно, что получается после сортировки такого массива
abcd
ab00e
ab0e
ab7e
ab000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000007e
ab007d
ab007e
ab007f
ab000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000007e
ab7e
ab100000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000007e
ab100000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000007e
ab00e


 
KSergey ©   (2009-06-15 12:17) [10]

> Andy BitOff ©   (15.06.09 00:30) [2]
> Винда тоже не так давно начала так сортировать.

Так - это как?

ТС, не понятно о чем изумление, всегда так было, это ж буквы, а не цифры.


 
Mystic ©   (2009-06-15 12:33) [11]

Говоря о сортировке, мне сразу вспоминается упражнение 17 из пятой главы Д. Кнута.


 
AndreyV ©   (2009-06-15 12:38) [12]

Я вот не понял удивления.


 
Andy BitOff ©   (2009-06-15 12:56) [13]


> KSergey ©   (15.06.09 12:17) [10]
> Так - это как?

Так, это
1
10
2
А недавно (мне подсказывают товарищи, с висты Styx [4]) начала правильно, а это так
1
2
10


 
clickmaker ©   (2009-06-15 13:07) [14]

> с висты

в 2003 тоже. А функция StrCmpLogicalW появилась в ХР


 
palva ©   (2009-06-15 14:27) [15]


> интересно, что получается после сортировки такого массива

У меня получилось:

Произошла ошибка в строке15: невозможно создать таблицу в базе!ab0e
ab00e
ab00e
ab000000000000000000000000000000000000000000000000000000000000000000000000000000  00000000000000000007e
ab000000000000000000000000000000000000000000000000000000000000000000000000000000  00000000000000000007e
ab007d
ab007e
ab007f
ab7e
ab7e
ab100000000000000000000000000000000000000000000000000000000000000000000000000000  000000000000000000007e
ab100000000000000000000000000000000000000000000000000000000000000000000000000000  00000000000000000007e
abcd


 
palva ©   (2009-06-15 14:30) [16]

Вроде бы форум лишний пробел в длинные строки вставил. На самом деле там один пробел.


 
Andy BitOff ©   (2009-06-15 14:43) [17]

У меня в ТС получилось
ab000000000000000000000000000000000000000000000000000000000000000000000000000000  00000000000000000007e
ab00e
ab0e
ab007d
ab007e
ab7e
ab007f
ab100000000000000000000000000000000000000000000000000000000000000000000000000000  000000000000000000007e
abcd

Остальные не могут быть созданны т.к. имена файлов не могут быть одинаковые

В ХР (проводнике)
ab000000000000000000000000000000000000000000000000000000000000000000000000000000  00000000000000000007e
ab00e
ab0e
ab007d
ab007e
ab7e
ab007f
ab100000000000000000000000000000000000000000000000000000000000000000000000000000  000000000000000000007e
abcd


 
Andy BitOff ©   (2009-06-15 14:44) [18]

Да, форум добавляет пробел


 
Sha ©   (2009-06-15 14:53) [19]

> palva ©   (15.06.09 14:30) [16]
> Вроде бы форум лишний пробел в длинные строки вставил. На самом деле там один пробел.

и в моем случае тоже, я имел ввиду строки без пробелов.

>Andy BitOff ©   (15.06.09 14:43) [17]

вроде есть нелогичность какая-то для лидирующих нулей, хотя тоже непротиворечиво получилось:

ab007e
ab07e
ab17e
ab107e


 
Sha ©   (2009-06-15 14:56) [20]

На мой взгляд так логичнее, если уж переть вдурь до конца
ab07e
ab007e
ab17e
ab107e


 
Andy BitOff ©   (2009-06-15 14:58) [21]


> Sha ©   (15.06.09 14:53) [19]

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


 
Sha ©   (2009-06-15 15:00) [22]

ну тогда 107 тысячных меньше 17 сотых


 
Andy BitOff ©   (2009-06-15 15:01) [23]


> Sha ©   (15.06.09 14:56) [20]

Так логичнее как раз при лексикографической сортировке, т.к. ab07e меньше ab007e


 
Andy BitOff ©   (2009-06-15 15:02) [24]


> Sha ©   (15.06.09 15:00) [22]

Я же говорю, отстаивать не буду ;)


 
Sha ©   (2009-06-15 15:05) [25]

> palva ©   (15.06.09 14:27) [15]

> ab007d
> ab007e
> ab007f
> ab7e
> ab7e

а это точно ошибка в ПХП, по идее надо

ab007d
ab007e
ab7e
ab7e
ab007f

или

ab007d
ab7e
ab7e
ab007e
ab007f


 
Andy BitOff ©   (2009-06-15 15:06) [26]


> Sha ©   (15.06.09 15:00) [22]
> ну тогда 107 тысячных меньше 17 сотых

Может он умный и видит, что здесь нет первых нулей и оперирует уже как целыми, а в случае с нулями, добавляет 0 целых


 
Sha ©   (2009-06-15 15:11) [27]

Поэтому и возникает ощущение неуютности, неизвестно, че оно там себе думает, и кто из нас умнее, я или железка


 
palva ©   (2009-06-15 16:24) [28]

Там есть ссылка на статью http://sourcefrog.net/projects/natsort/ в которой говорится:

Leading zeros are not ignored, which tends to give more reasonable results on decimal fractions.

   1.001 < 1.002 < 1.010 < 1.02 < 1.1 < 1.3

Как бы звучит логично, но если вместо 1.1 взять 1.11 то php сортирует неправильно, даже не смотря на то, что точка стоит явно.
a1.001
a1.002
a1.010
a1.02
a1.3
a1.11
Если букву a убрать, то наверно будет правильно, но это уже потому, что php сохранит такую строку в числовом виде, как плавающее число.


 
Sha ©   (2009-06-15 16:40) [29]

> palva ©   (15.06.09 16:24) [28]

Тут они с MS разошлись, у каждого своя нативность.
А мне моя нативность [20] нативнее.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.009 c
2-1245417227
iterator
2009-06-19 17:13
2009.08.16
Как обратиться к объекту?


2-1245271265
Zalm
2009-06-18 00:41
2009.08.16
Проблемы с DateToStr


15-1245181636
man from earth
2009-06-16 23:47
2009.08.16
а я например верю в лунатиков и в теории заговоров


3-1221819683
Igor
2008-09-19 14:21
2009.08.16
Выгрузка данных из таблицы в Oracle


15-1243524349
Zeqfreed
2009-05-28 19:25
2009.08.16
Mysql. Оптимизация выборки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский