耐心和持久胜过激烈和狂热。
哈喽大家好,我是陈明勇,今天分享的内容是巧用 Go Map 特性对数组或切片进行去重。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!
前言JavaSetSetGoSetGoMapSetMapkeyMap
使用 Map 构建 Set
type MySet map[any]struct{}
MySetmap[any]strcut{}
mapkeyanymapkeymapvaluestruct{}k-vvaluestrcut{}{}fmt.Println(unsafe.Sizeof(struct{}{})) // 0
对数组或切片去重
import "fmt"
type MySet map[any]struct{}
func main() {
s1 := []int{1, 1, 2, 3}
fmt.Println(duplicateRemoving(s1)) // [1 2 3]
s2 := []string{"a", "b", "c", "a"}
fmt.Println(duplicateRemoving(s2)) // [a b c]
}
func duplicateRemoving[T any](s []T) []T {
res := make([]T, 0, len(s))
mySet := make(MySet)
for _, t := range s {
if _, ok := mySet[t]; !ok {
res = append(res, t)
mySet[t] = struct{}{}
}
}
return res
}
核心思路
resMySet mySetsmySetstkeyrestmySett → struct{}{}
小结
GoMapMapSetValuestruct{}Valuestrcut{}{}