Как в коллециях сохранять деревья?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Как в коллециях сохранять деревья?

Сообщение brigval » 08.12.2007 (Сб) 10:37

Где-то прочитал, что коллекции удобны для хранения данных деревьев с возможностью последующего заполнения контрола-дерева. Подскажите, пожалуйста, идею как это сделать, или дайте ссылку кто знает где посмотреть.
brigval

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 08.12.2007 (Сб) 14:26

Дерево - граф без циклов. Но, главное - граф. Каждый узел графа имеет связи (ребёра) с другими узлами.

Коллекция позволяет хранить ссылки на объекты.

Пусть тогда коллекция будет узлом графа, а рёбрами графа пусть будут хранимые в коллекции ссылки.

Пример.

Есть объекты: A, B, C, D - в каждом их которых реализована коллекция.

Коллекция внутри A хранит ссылки на объекты B и C.
Коллекция внутри B хранит ссылки на A и D.
Коллекция внутри C хранит ссылку на A.

Получаем дерево

A
+-B
| |
| +--D
|
+--C
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 08.12.2007 (Сб) 14:50

Хакер
То есть, элементами коллекции А являются коллекции B и С, а элементом коллекции B является коллекция D? Или не так? Что подразумевается под ссылкой?
При работе с деревом для узла нужен текст, индекс, тэг, иконка и т.п. Как их можно хранить в колекциях?
Или дерево коллекции - это просто голое дерево?
brigval

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 08.12.2007 (Сб) 17:08

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

Какая ещё иконка? :shock:

Что подразумевается под ссылкой?

Под ссылкой подразумивается безопасный указатель на объект.

То есть, элементами коллекции А являются коллекции B и С, а элементом коллекции B является коллекция D? Или не так?

Не так. Коллекции витают в абстрактном пространстве, но в каждой коллекции хранятся связи с соседними коллекциями (т.е. рёбра).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 08.12.2007 (Сб) 17:44

Хакер
Есть контрол TreeView. Возможно ли с помощью коллекций получить "дерево" для последующего заполнения этого контрола? То есть, при считывании данных загружать их не сразу в TreeView, а после считывания всех данных.
brigval

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 08.12.2007 (Сб) 17:47

brigval писал(а):То есть, элементами коллекции А являются коллекции B и С, а элементом коллекции B является коллекция D? Или не так?
Примерно так. Коллекция является частью элемента другой коллекции.
Хакер писал(а):Какая ещё иконка?
Очевидно речь идет не об абстрактном дереве, а о конкретном - TreeView.
При работе с деревом для узла нужен текст, индекс, тэг, иконка и т.п. Как их можно хранить в колекциях?
Будучи помещенными в TreeView, все эти атрибуты и так будут распиханы по коллекциям. Зачем для этого городить внешнюю структуру?

Автору предлагается конкретизировать проблему, потому что в отрыве от конкретной задачи можно с полной уверенность заявить, что данные для деревьев лучше хранить в массиве, потому что из массива они извлекаются быстрее, чем из коллекции. А до этого они в коллекцию должны как-то попасть. А в массив (не любой конечно) данные можно залить, допустим из файла, всего парой операций.
Живой пример - HTML-парсер Алибека с моими поправками. Древовидная иерархия есть, коллекций нет.
Лучший способ понять что-то самому — объяснить это другому.

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 08.12.2007 (Сб) 18:23

Antonariy
Попробую конкретизировать.
Как пример, подходит получение дерева папок и файлов. С помощью рекурсии я считываю, например, имена папок и файлов и их вхождения. Но для того, что бы не заполнять сразу TreeView хотелось бы сначала поместить данные в нечто быстро работающее. С возможностью обработки. А потом, готовый результатом заполнить TreeView.
Далее, если попались две папки с одинаковым именем (что гарантирует мне идентичный их состав), то не считывать повторно, а перенести данные из массива, если дерево можно сохранять в массиве, в массив же.


Папки и файлы это условно. На самом деле работа идет с документами в Excel, на считывание которых тратися значительное время. И один и тот же документ может встречаться не однократно, как входящий в состав других документов.
brigval


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: PetalBot и гости: 23

    TopList