0

私は、ツリー構造とノード (多くのノード) をツリーに追加する機能が必要な Go プログラミング言語のプロジェクトに取り組んでいます。各ノードは、次のような構造体です。

type Node struct {
    ip net.IP
    nodes []Node
    value int
}

各ノードが持つことができるノードの数は可変です (1 ~ 4)。IP アドレス (後ほど検索します) をノードに含めることができますが、ほとんどのノードはその要素に対して nil になります。

これは他の言語で簡単に実行できますが、これらのノードを Go のツリーに効率的に追加する方法を見つける必要があります。

4

1 に答える 1

2

たとえば、nodesへのポインタのスライスとしてNode

package main

import (
    "fmt"
    "net"
)

type Node struct {
    value int
    ip    net.IP
    nodes []*Node
}

func main() {
    node1 := Node{value: 1}
    node2 := Node{value: 2}
    node3 := Node{value: 3}
    node4 := Node{value: 4}
    node1.nodes = append(node1.nodes, &node2, &node3)
    node2.nodes = append(node2.nodes, &node4)
    node3.nodes = append(node3.nodes, &node4)
    fmt.Printf("node1: %p %v\n", &node1, node1)
    fmt.Printf("node2: %p %v\n", &node2, node2)
    fmt.Printf("node3: %p %v\n", &node3, node3)
    fmt.Printf("node4: %p %v\n", &node4, node4)
}

出力:

node1: 0xc200069100 {1 [] [0xc200069180 0xc200069200]}
node2: 0xc200069180 {2 [] [0xc200069240]}
node3: 0xc200069200 {3 [] [0xc200069240]}
node4: 0xc200069240 {4 [] []}

スライスタイプ

スライスの追加とコピー

SliceTricks

ポインタの種類

于 2012-12-02T00:00:21.267 に答える