【发布时间】:2015-12-05 22:06:59
【问题描述】:
我还是个新手,我现在真的很困惑。
假设我有一个坐标列表,假设我在这个坐标列表中有一些双精度数。我一辈子都想不出如何制作一个独特的清单。通常在 Python 中,我可以用集合和其他内置函数“作弊”。在 Go 中没有那么多。
package main
import (
"fmt"
"reflect"
)
type visit struct {
x, y int
}
func main() {
var visited []visit
var unique []visit
visited = append(visited, visit{1, 100})
visited = append(visited, visit{2, 2})
visited = append(visited, visit{1, 100})
visited = append(visited, visit{1, 1})
unique = append(unique, visit{1, 1})
fmt.Println(unique)
// Go through the visits and find the unique elements
for _, v := range visited {
for _, u := range unique {
fmt.Printf("Here's unique: %v\n", unique)
fmt.Printf("Comparing %v to %v is %v\n", v, u, reflect.DeepEqual(v, u))
if reflect.DeepEqual(v, u) {
fmt.Println("Skip")
} else {
unique = append(unique, v)
}
}
}
fmt.Println(unique)
}
【问题讨论】:
-
如果您希望列表仅包含唯一条目,您通常可以执行
map[string]struct{}{}之类的操作。空结构不占用任何内存。
标签: arrays go set unique slice