Поиск правильного решения

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Аватара пользователя
beria
постоялец
Сообщения: 130
Зарегистрирован: 29.09.2016 07:57:13

Сообщение beria »

igordz писал(а):Что посоветуете насчет сортировки?


Для начала сразу хранить дату в родном и нормальном универсальном человеческом вещественном формате TDateTime для которого есть кучи прекрасно работающих процедур и функций для чего угодно, в том числе и для приведения в текстовый вид и переконвертировать в строки только по надобности))) При этом одномоментно все проблемы снимаются.
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

zub писал(а):Ждем тему про непонятный вылет при закрытии и забагованость canclose))

Это неинтересная тема, а вот про умную сортировку... Вот про эту:
zub писал(а):Овнердрав процедура отображает имя ноды на основе данных взятых по индексу\указателю в соответствии с настройками, процедура сортировки сортирует ноды на основе данных взятых по индексу\указателю на основе настройки способа сортировки. Настройки отображения\сортировки можно менять налету без пересоздания дерева.

Было бы интересно впитать информацию, из просвещённых умов.

Код: Выделить всё

TMyFileInfo=record
  Path,Name:String;
  CreateTime,ModifyTime:TDateTime;
  Attr:TMyFileAttr;
end;


Вот Ваш рекорд: :roll: Как по нему сортировать налету в treeview?

.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

yстанавливаешь обработчик события OnCompare

Код: Выделить всё

procedure TForm1._CompareItems(Sender: TObject; Node1, Node2: TTreeNode;var Compare: Integer);

в нем из Node1, Node2 восстанавливаешь привязаные к ним данные и сравниваешь как тебе надо, результат возвращаешь в var Compare: Integer
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

zub писал(а):в нем из Node1, Node2 восстанавливаешь привязаные к ним данные и сравниваешь как тебе надо, результат возвращаешь в var Compare: Integer

Тюууу.... :cry: Это что же, сортировка - совсем без моторчика? :roll: Вот ведь: какие были изначально простые методы сортировки от художников, до тех пор пока не вмешались программисты... :wink: :mrgreen:

.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Незнаю что там у тебя за моторчики... надо уметь только сравнивать ноды между собой. Вижу в этом только упрощения
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

zub писал(а):Незнаю что там у тебя за моторчики... надо уметь только сравнивать ноды между собой. Вижу в этом только упрощения

:oops: Это был юмор: "без моторчика" - значит: ручками нужно, писать код, а с моторчиком, это значит, что сортировка уже сделана, до нас, разработчиками. Всё зависит от задачи. Лично мне сортировка - ненужна. А вот, ТС, не знаю. Если он привязывает файлы в дату, то конечно же Ваш метод 100% более правильный, а если не привязывает, то метод художников проще :roll: ИМХО (т.к. ничего мудрить ненужно).
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Какой метод?

Код: Выделить всё

  TreeView1.SortType:=stText;
  TreeView1.AlphaSort; 

если этот - то это то о чем я и говорю, только вместо нашего CompareItems используется встроеный, сравнивающий имена нод.

а если посортировать стринглист перед загрузкой в тривиев, то садись, 2!
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

zub писал(а):то садись, 2!

О это хуже, если топик стартер, так решает учебные задачи, то всё зависит от квалификации учителя:
1) если учитель хороший (как я например), то он скажет: Молодец - отличное неординарное решение, но можно было отсортировать, вот так "TreeView1.AlphaSort;".
2)
А если учитель "злой и коварный" как Zub, то естественно он скажет "садись, 2", т.к. в алгоритме с использование стринг листа - это отступление от стандарта и поиск нестандартного решения. При этом, "злой и коварный" Zub не учитывает что, далеко не все компоненты умеют автоматически сортировать.

Но самое, главное, "злой и коварный" Zub, не заметил, что предложенную "злым и коварным" Zub-ом сортировку, художники, предлагали изначально, вот так: "TreeView1.Items.SortTopLevelNodes();" и заметь-те, "злой и коварный" Zub, что описание: procedure SortTopLevelNodes(SortProc: TTreeNodeCompare);, ведёт к вот такой развязке: TTreeNodeCompare = function(Node1, Node2: TTreeNode): integer of object;, в смысле, ненужно выдумывать вот это, TForm1._CompareItems, когда мудрые художники предложили систему заложенную в TreeView1. Так что, садитесь "злой и коварный" Zub Вам, по Вашей-же методике: 2 - за невнимательность!
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

уговорил, пусть 3!
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

zub писал(а):уговорил, пусть 3!

Ладно, Zub, уговорил, садись тоже: 3 - за предложенный Type для возможности сортировки "на лету", по всем параметрам. :wink:
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

Сообщение olegy123 »

Код: Выделить всё

    procedure TForm1._CompareItems(Sender: TObject; Node1, Node2: TTreeNode;var Compare: Integer);

Сравниваешь Node1, Node2
в Compare заносишь
если Node1 меньше Node2 то Compare = 1
если Node1 равно Node2 то Compare = 0
если Node1 больше Node2 то Compare = -1

Добавлено спустя 5 часов 12 минут 54 секунды:
кто такие художники?
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

olegy123 писал(а):кто такие художники?

Кто такие Художники? Ну... Это такие классные люди, которые всё делают художественно и подтрунивают время от времени над программистами. Подмигивают им всячески, :wink: глаза вверх закатывают :roll: и выцыганивают у программистов всяческие секреты :mrgreen: . В общем очень хорошие и добрые люди :twisted: На самом деле: художники - это маска, за которую можно спрятаться, когда общаешься с программистами, у которых больше знаний и навыков, когда они начинают ругаться на неграмотные высказывания художников :cry: .
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

Это такие классные люди, которые всё делают художественно
в принципе художественно посоветовали :mrgreen:
По поводу кода...
Добавьте рекурсию и почитайте вики о деревьях. Можно сделать разные варианты сортировок, фильтрацию...

п.с.
персонально художнику: я принудительно формат даты поставил не из-за кривости сортировки... :lol:
zub хм.. у вас художники нечто красной тряпки для быка? :))))
Вложения
dir_locate.7z
простенько и без вкуса?.
(60.33 КБ) 530 скачиваний
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

>>На самом деле: художники - это маска, за которую можно спрятаться
Так ты не художник...))
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

olegy123 писал(а):кто такие художники?

Только программист может задать вопрос: Кто такие художники?...

И когда программисту объясняешь суть понятия "художники", только программист может сказать:
zub писал(а):Так ты не художник...


И если, теперь программисту, сказать: НЕТ - Я КОСМОНАВТ!
То только программист спросит, а: Кто такие космонавты?
И получив объяснение понятия "космонавты", только программист, сделает вывод: Так ты не космонавт...


.
Ответить