Closed GoogleCodeExporter closed 8 years ago
вроде нормально сортирует - и русские и
английские
Original comment by Alexander.V.Kasatkin@gmail.com
on 8 Jul 2012 at 12:39
Attachments:
А у меня почему-то вот так
Original comment by mindphaser2k6
on 8 Jul 2012 at 12:43
Attachments:
Сдается мне это связано с региональными
настройками сортировки.
mindphaser2k6, нет желания поэкспериментировать с этим? Если да, то можно будет что-нибудь попробовать придумать. Писать самому с нуля юникодный сортировщик - увольте, там столько особенностей, что черт ногу сломит.
Original comment by Andrei.K...@gmail.com
on 12 Jul 2012 at 7:18
Да. Именно так. Сейчас используется
следующая конструкция:
Collator collator = Collator.getInstance();
Соответственно, очередность символов
определяется текущей локалью.
Извини, но лично я категорически против
вмешательства в это дело. Кому-то захочется
_ в начало, кому-то !, а кому-то еще что-то.
Пусть этим рулит система и настройки
локали. Максимум на что мы можем пойти, это
конфигурация локали, но и то в отдаленном
будущем.
Original comment by Andrei.K...@gmail.com
on 12 Jul 2012 at 7:28
Я посмотрел декомпилированные исходники
Total Commander, Root Explorer, Solid Explorer и OI FileManager. Ни в
одном из них Collator не используется. Хотя я
встречал одну статью, где его советовали
использовать для сортировки списка файлов,
но мне кажется это излишне, плюс он же при
смене локали может по-разному сортировать
файлы?
В OI FileManager используется Collections.sort(), в нем
файлы с первым "_" показываются внизу
списка, как и у вас.
В Total Commander и Root Explorer - сложно разобраться в
коде, т.к. там все обфускированно. Файлы с
первым "_" показываются в них вначале
списка. Я почему считал, что _ должен быть
вначале. Потому что привычно: в проводнике
Windows7 он вначале, в консоли cygwin тоже, в
десктопном и андроидном Total Commander вначале, в
Root Explorer вначале, в Solid Explorer тоже. Хотя в Solid
Explorer для сравнения используется
String.compareToIgnoreCase(), там большие и маленькие
имена вперемешку. В целом, идея была такая,
чтобы можно было создать папки, которые
всегда отображаются в топе.
Так что не знаю, может вы и правы, но если
еще согласны обсуждать, то я завтра
попробую поиграться со String.compareTo() например.
Может хотя бы опцией сделать. Конфигурацию
локали вряд ли стоит делать.
Кстати, зачем вы при сравнении цифры
пропускаете?
Original comment by mindphaser2k6
on 12 Jul 2012 at 7:15
> Кстати, зачем вы при сравнении цифры
пропускаете?
Мы не пропускаем, а сравниваем их отдельно -
именно как числа.
Что бы был нормальный порядок: 1, 2, 10.
А не: 1, 10, 2
Original comment by Alexander.V.Kasatkin@gmail.com
on 12 Jul 2012 at 8:09
[deleted comment]
Понятно, просто у меня сегодня не было
времени анализировать алгоритм :-)
Original comment by mindphaser2k6
on 12 Jul 2012 at 8:11
Более того. Не просто цифры сортируем, а еще
игнорируем лидирующие нули.
Original comment by Andrei.K...@gmail.com
on 12 Jul 2012 at 8:27
Понял, полезная вещь.
Original comment by mindphaser2k6
on 12 Jul 2012 at 8:45
На самом деле оказалось вот что. В файловом
браузере у вас collator не используется, и
вообще compareNatural() не вызывается (и это
хорошо).
Там работает BrowserAdapter, и сравнение делает он
в строке 113:
return f1.getName().compareTo(f2.getName());
если это заменить на
return f1.getName().compareToIgnoreCase(f2.getName());
то все будет так же, как в большинстве
файловых менеджеров: проводнике Windows, Total
Commander, Root Explorer, Solid Explorer.
Original comment by mindphaser2k6
on 13 Jul 2012 at 3:20
Attachments:
А если там задействовать мой алгоритм с
коллатором?
Original comment by Andrei.K...@gmail.com
on 13 Jul 2012 at 5:26
Не пробовал. Есть ли смысл? Но в любом
случае надо делать ignoreCase, т.к. это как бы
стандарт де факто получается. Т.е. если даже
с коллатором, то, как я понимаю, надо в нем
включать setStrength(Collator.PRIMARY), хотя может оно и
по дефолту включено.
Original comment by mindphaser2k6
on 13 Jul 2012 at 5:48
С файл-браузером вообще все плохо. Он с
некоторого времени оказался на обочине.
Работали в основном над шкафом и все
новинки и фиксы шли туда.
А в браузере и данные хранятся крайне
примитивно, и рабочий код дублируется с
идиотскими мелкими отличиями, и файлы
сканирует он в основном потоке.
В общем, плохо все
Original comment by Alexander.V.Kasatkin@gmail.com
on 13 Jul 2012 at 6:08
То, что он еще есть - уже хорошо :-)
К нему в общем-то и пожеланий немного: чтобы
показывал привычную файловую структуру и
может быть еще закладки/последние папки
для быстрого перехода, и то необязательно.
Просто я никак не привыкну к шкафу, папку
книг скопировал выборочно из библиотеки на
ПК, повторяя ту же структуру дерева,
получилось около 900 Мб, ну и соответственно
ориентироваться в этой беде проще, когда
дерево папок выглядит также, как в
программах на ПК. По скорости файл-браузер
работает вполне нормально, и если он дальше
развиваться не будет, то рефакторинг и
фоновое сканирование может быть излишним.
А так, если его развивать, то при желании
там можно много чего нафантазировать из
фич.
Original comment by mindphaser2k6
on 15 Jul 2012 at 1:14
Original comment by Alexander.V.Kasatkin@gmail.com
on 25 Sep 2012 at 2:27
Implemented.
Original comment by Alexander.V.Kasatkin@gmail.com
on 25 Dec 2013 at 10:05
Original issue reported on code.google.com by
mindphaser2k6
on 7 Jul 2012 at 1:30