2

オブジェクトの構造のような単純なツリーを構築し、各オブジェクトの深さレベルを識別しようとしています。これを行うために、再帰関数を作成しましたが、この関数は常に最後の結果を返し、予想される合計結果ではありません。おそらく結果を間違った場所に保存します。

def getStructure(anObject, level=0) {

    def results = []

    // [parent id, object id, level]

    if(anObject.parent == null) {
        results.add([0, anObject.id, level])
    } else {
        anObject.children?.each { child ->
            results.add([anObject.parent.id, child.id, level])
    }

    // recursive call
    anObject.children?.each { child ->
       getStructure(child, level++)
    }

    results
}

私のテストケースでは、常に最新の実行を取得するため、結果 = [] が毎回再初期化されると思います。再帰関数の結果を保存するにはどうすればよいですか?

4

1 に答える 1

2

再帰呼び出しの結果を結果に追加する必要があります。それ以外の

// recursive call
anObject.children?.each { child ->
   getStructure(child, level++)
}

これを試して:

// recursive call
anObject.children?.each { child ->
   results.addAll(getStructure(child, level++))
}
于 2013-01-14T23:07:14.710 に答える