【发布时间】:2012-05-06 14:43:56
【问题描述】:
我创建了一个具有父级和子级的 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]。
不过,我想知道如何使用数组正确执行此操作。谢谢
【问题讨论】:
-
你能把构建树的不同层次的代码贴出来吗?
-
更新示例,包含完整的工作示例和输出的 cmets
标签: go