【发布时间】:2015-02-26 07:48:12
【问题描述】:
我试图用 Go 语言制作 Trie 数据结构,但不知何故它遇到了引用问题, 这里是。 http://play.golang.org/p/ASSGF5Oe9R
// Package main provides ...
package main
import "fmt"
type RootTrie []Trie
type Trie struct {
subtrie []Trie
index byte
}
func (trie *Trie) Insert(data string) *Trie {
if data != "" {
if trie.index == 0 {
trie.index = data[0]
}
if next := trie.containsIndex(data[1:]); next != nil {
//Problem Point
fmt.Println(string(data[1]), "found follwing", string(data[0]))
next.Insert(data[1:])
} else {
nt := &Trie{}
trie.subtrie = append(trie.subtrie, *nt.Insert(data[1:]))
}
}
return trie
}
func (trie *Trie) containsIndex(next string) *Trie {
if next != "" {
for _, st := range trie.subtrie {
if st.index == next[0] {
return &st
}
}
}
return nil
}
func main() {
t := &Trie{}
t = t.Insert("hanyang")
fmt.Println("result:", t)
t = t.Insert("hanyKk")
fmt.Println("result:", t)
t.Insert("hanyK")
}
在第二个“插入”中出现以下问题,
我放的地方,//Problem Point
我制作了containsIndex 方法来搜索下一个链接的trie,它实际上搜索得很好。
但是当我更新containsIndex 给出的next 属性时,它并没有影响它的母结构trie。
我不明白的是我在返回 containsIndex 时给了它引用类型,但它仍然
行为喜欢'价值复制',为什么它不影响其母结构(trie)?
谢谢!
【问题讨论】:
-
我不明白 -1 - 存在语言障碍,但它解释了问题的本质,并且有代码可以乱七八糟。
标签: go pass-by-reference pass-by-value trie pass-by-name