親と子を持つElement構造体を作成し、SubElementと呼ばれるヘルパー関数を作成し、印刷のためにすべての子を反復処理するStringメソッドを作成しました。
package main
import "fmt"
type Element struct {
parent *Element
children []Element
tag string
}
func SubElement(parent *Element, tag string) Element {
el := Element{}
el.parent = parent
el.tag = tag
parent.children = append(parent.children, el)
return el
}
func (el Element) String() string {
s := "<" + el.tag + ">"
for _, child := range el.children {
s += child.String()
}
s += "</" + el.tag + ">"
return s
}
func main() {
root := Element{}
root.tag = "root"
a := SubElement(&root, "a")
b := SubElement(&a, "b")
SubElement(&b, "c")
fmt.Println(root) // prints: <root><a></a></root>
fmt.Println(a) // prints: <a><b></b></a>
// and so on
}
私が経験している問題は、印刷することを選択したルートノードから子の最初の層しか利用できないことです。これは、parent.childrenでのappendの使用に関連していると確信していますが、これを正しく解決する方法についての理解が不足しています。
この問題を回避するために、に変更children
しましたmap[int]Element
。次に、SubElement関数で、を「追加」しparent.children[len(parent.children)] = el
ます。次に、正しい順序で反復するために、Stringメソッドのfor-loopはfor i:= 0; i < len(el.children); i++
、にアクセスしel.children[i]
ます。
それでも、配列を使用してこれを正しく行う方法を知りたいです。ありがとう