原文地址:https://segmentfault.com/a/1190000020696388
Go如何对数组切片进行去重
package main
import (
"fmt"
)
func main() {
s := []string{"hello", "world", "hello", "golang", "hello", "ruby", "php", "java"}
fmt.Println(removeDuplicateElement(s)) //output: hello world golang ruby php java
}
func removeDuplicateElement(languages []string) []string {
result := make([]string, 0, len(languages))
temp := map[string]struct{}{}
for _, item := range languages {
if _, ok := temp[item]; !ok { //如果字典中找不到元素,ok=false,!ok为true,就往切片中append元素。
temp[item] = struct{}{}
result = append(result, item)
}
}
return result
}
go run demo1.go
[hello world golang ruby php java]
解释
removeDuplicateElement函数总共初始化两个变量,一个长度为0的slice,一个空map。由于slice传参是按引用传递,没有创建占用额外的内存空间。
map[string]struct{}{}创建了一个key类型为String值类型为空struct的map,等效于使用make(map[string]struct{})
空struct不占内存空间,使用它来实现我们的函数空间复杂度是最低的。
有疑问加站长微信联系(非本文作者)