2012-01-26 4 views
1

У меня есть одна таблица, которая 1.000 строк и 6 столбцов. Он имеет поле идентификатора в качестве индекса и второе поле «Имя», которое содержит имя конкретного объекта в thistable. Как вы можете догадаться, имя уникально.Treeview, основанный на одном поле

Имена - это что-то вроде «Plant.Tree.Apple.Pit» или «Animal_Mammal_Dog» или любого другого не-буквенного/нецифрового разделителя. Не большая проблема. Но мне нужно разбить эти имена на слова и передать им эти слова. Таким образом, мой первый пример будет 4 уровня, а мой второй три уровня. А затем он должен отображаться пользователю в браузере.

Каков наиболее эффективный способ построить это дерево?

+0

Вы можете изменить предложения схемы схемы базы данных или это то, что вы не можете изменить и абсолютно необходимо сделать в этой базе данных «Plant.Tree.Apple.Pit'? –

+0

Нет, схема БД исправлена. С этой структурой уже слишком много кода, иначе было бы намного проще. –

ответ

0

Ну, «наиболее эффективный» обычно зависит от того, как вы планируете получать доступ к данным. Вам просто нужно разобрать дерево, а затем отобразить его пользователю, и это правда?

В этом случае, я полагаю, я бы смоделировал его как простое дерево, созданное, например, для объектов Node.

Существуют и другие древовидные структуры, которые вы могли бы использовать, но они усложняются, и снова это зависит от того, как вы собираетесь использовать эти данные. Вы строите это дерево на веб-сервере и, следовательно, должны быть как можно быстрее, чтобы избежать кучи-голодания? Вы просто показываете его пользователю?

Другим вариантом было бы сбросить необработанные строки на страницу, а затем написать javascript для генерации дерева отображения из сброшенных данных. Таким образом, веб-браузер вашего клиента выполняет всю работу по разбору дерева и его отображению.

Редактировать, чтобы ответить на ваш комментарий:

Хорошо, тогда бы стандартную структуру дерева работу? Я предполагаю, что вы знаете, как это сделать, но на всякий случай:

Вы захватываете ряд, разбираете его жетоны. Начиная с первого токена и начиная с корня дерева, выясните, является ли токен дочерним элементом текущего узла; если это так, установите его как ваш текущий узел и перейдите к следующему токену. Если нет, вставьте его в дерево и сделайте его новым текущим узлом. Отметьте эти узлы как узлы пространства имен. Повторяйте, пока не нажмете последний токен, который представляет ваш конечный объект. Вставьте в текущий узел свой объект с его параметрами.

Вы можете сделать все это одним классом; иметь класс хранения типа узла (пространство имен или объект), список дочерних узлов и свойства объекта, когда узел имеет объект типа. Или вы можете сделать это с наследованием и кастингом, так что каждому узлу не нужно иметь параметры для объекта, слышимый будет нулевым во всех узлах пространства имен.

+0

Да, разобрать дерево, показать его пользователю. За исключением того, что листья дерева покажут некоторые дополнительные поля. Однако проблема заключается главным образом в создании этого дерева узлов. –

Смежные вопросы