Преобразование вложенных элементов ArrayCollection в другой класс - PullRequest
0 голосов
/ 01 февраля 2011

У меня есть ArrayCollection, и каждый элемент является экземпляром класса TreeNode (созданного мной пользовательского класса), у которого есть свойство children, которое представляет собой ArrayCollection нескольких элементов TreeNode. Таким образом, у меня есть дерево элементов в структуре ArrayCollection:

tree = new ArrayCollection([
    [new TreeNode(param1, param2, new ArrayCollection([
        [new TreeNode(param1, param2, null)],
        [new TreeNode(param1, param2, new ArrayCollection([
            [new TreeNode(param1, param2, null)],
            [new TreeNode(param1, param2, new ArrayCollection([
                [new TreeNode(param1, param2, null)],
                [new TreeNode(param1, param2, null)]
            ]))],
            [new TreeNode(param1, param2, new ArrayCollection([
                [new TreeNode(param1, param2, null)],
                [new TreeNode(param1, param2, null)]
            ]))]
        ]))]
    ]))],
    [new TreeNode(param1, param2, null)]
]);

Конструктор TreeNode имеет 3 параметра: первые два значения не имеют значения, но третье - это свойство children (ArrayCollection), и если TreeNode не имеет дочерних элементов, то для этого параметра должно быть установлено значение null. 1004 *

Я написал следующую функцию для рекурсивного синтаксического анализа структуры дерева:

private function parse(obj:Object):void {
    for (var i:int = 0; i < obj.length; i++) {
        if (obj[i] is TreeNode) {
            if (obj[i].children != null) {
                parse(obj[i].children);
            }
        } else {
            parse(obj[i]);
        }
    }
}
parse(tree);

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

1 Ответ

0 голосов
/ 02 февраля 2011

Я сделал это:

private function parse(obj:Object, ancestor:Node):void {
    for (var i:int = 0; i < obj.length; i++) {
        if (obj[i] is TreeNode) {

            var node:Node = new Node(obj[i].param1, obj[i].param2);
            node.ancestor = ancestor;

            if (ancestor != null) {
                ancestor.children.push(node);
            }

            if (obj[i].children != null) {
                parse(obj[i].children, node);
            }

            obj[i] = node;
        } else {
            parse(obj[i], ancestor);
        }
    }
}
parse(tree, null);

Таким образом, все TreeNodes будут преобразованы в Nodes (Node - это еще один пользовательский класс, который я создал)

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