Я даже не хочу представить медлительность этого решения.

аю, что все, кто когда-либо использовал Delphi VirtualStringTree, согласятся, что это отличный элемент управления. Это «виртуальный» элемент управления (ваши данные должны храниться где-то еще), поэтому я подумал, какая структура данных лучше всего подходит для такой задачи? ИМО, что структура данных должна поддерживать иерархию, она должна быть быстрой и легко расширяемой. Самой простой реализацией было бы использование записи, и это то, что предлагает большая часть документации, которую можно найти. Но что, если вам нужно сделать быстрый поиск, подсчитать итоги и т. Д.? Какую структуру данных вы используете вместе с VirtualStringTree?

EDIT1Я использую Delphi 2010

Хорошо, я постараюсь рассказать подробнее о моих требованиях. Размер данных может быть очень переменным, от 1 до тысяч элементов. Каждый элемент может содержать несколько строк, целочисленных значений. Мне нужен произвольный доступ, мои данные могут меняться много раз за время существования приложения. Хорошая производительность очень желательна. Мне также нужно сохранить данные и перезагрузить.

EDIT2: Получил 1 ответ, поэтому я постараюсь прокомментировать свое мнение. Спасибо, Дорин за твой ответ, но я не думаю, что твоя структура очень удобна. 1) Это не касается иерархии. 2) Наличие отдельных TStringList или TList для каждого узла не очень эффективно для IMO. С этой реализацией я могу только искать данные текущего узла, но не могу эффективно искать во всем дереве.

Я думаю, что эта структура данных должна быть похожа на дерево. У него должны быть узлы с возможностью добавления потомков. Тогда я мог бы просто получить данные узла в событии OnInitNode, проверить, есть ли у моего узла некоторые дочерние элементы, установить флаг ivsHasChildren, если это так, то в событии OnInitChildren установить правильное количество дочерних элементов. Позже в событии OnGetText я мог просто получить необходимые данные из структуры моего узла и установить для него значение CellText на основе индекса столбца. Моя идея состоит в том, чтобы иметь отдельную структуру данных и выполнять все необходимые операции с ней без необходимости использовать VirtualStringTree. Надеюсь, кто-то понял мою точку зрения :).

EDIT3Я нашел довольно интересный модуль JclTrees, который на первый взгляд может быть использован для достижения того, что я ищу. Это принадлежитJCL библиотека. Отсутствие достойной документации затрудняет быстрое изучение его функциональности. Я, вероятно, посмотрю глубже, когда у меня будет больше времени.

Ответы на вопрос(3)

Ваш ответ на вопрос