Treeview на основе одного поля - PullRequest
1 голос
/ 26 января 2012

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

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

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

1 Ответ

0 голосов
/ 26 января 2012

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

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

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

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

Правка для ответа на ваш комментарий :

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...