Какая структура данных лучше всего подходит для VirtualStringTree?

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

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

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

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

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

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

7
задан Linas 17 January 2011 в 17:40
поделиться