Go言語の練習 - container/list
container/listは双方向連結リストが実装されている。
以下は重複する要素を削除するコード。
package main import ( "container/list" "fmt" ) // mapを使うパターン func uniquify(l *list.List) { table := make(map[interface{}]bool) element := l.Front() for element != nil { if _, ok := table[element.Value]; ok { tmp := element.Next() l.Remove(element) element = tmp } else { table[element.Value] = true element = element.Next() } } } // 2重ループを使うパターン func uniquify2(l *list.List) { element := l.Front() for element != nil { runner := element.Next() for runner != nil { if runner.Value == element.Value { tmp := runner.Next() l.Remove(runner) runner = tmp } else { runner = runner.Next() } } element = element.Next() } } func main() { l := list.New() l.PushBack("Apple") l.PushBack("Grape") l.PushBack("Orange") l.PushBack("Apple") l.PushBack("Grape") l.PushBack("Orange") uniquify(l) for e := l.Front(); e != nil; e = e.Next() { fmt.Printf("%v\n", e.Value) } }
Apple Grape Orange