Go 言語で Trie データ構造を作ろうとしたのですが、なぜか References 問題で行き詰まってしまいました。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")
}
私が入れた2番目の「挿入」では、次の問題が発生します。//Problem Point
次に連結したトライを検索する方法を作っcontainsIndex
たところ、実際にうまく検索できました。しかし、与えられたnext
プロパティを更新するとcontainsIndex
、その母構造体には影響しませんでしtrie
た。
私が理解していないのは、 を返すときに参照型を指定したことですcontainsIndex
が、それでも「コピーされた値」が好きでしたtrie
。
ありがとう!