如果你想在Go中删除切片中的重复值,你需要创建一个函数:
- 遍历分片。
- 检查片断的一个给定值是否在结果值的集合中。如果不是,则将该值添加到结果片中。如果是,则跳过该值(我们在输出片断中已经有了它)。
- 返回新的输出片断,删除重复的部分。
unique() 函数最重要的部分是创建一个所见值集,它是一个类型为map[string]bool 的映射,所以它可以检查元素是否已经在结果片中。
package main
import "fmt"
func unique(s []string) []string {
inResult := make(map[string]bool)
var result []string
for _, str := range s {
if _, ok := inResult[str]; !ok {
inResult[str] = true
result = append(result, str)
}
}
return result
}
func main() {
fmt.Println(unique([]string{"abc", "cde", "efg", "efg", "abc", "cde"}))
}
输出
[abc cde efg]
作为输出,你得到一个新的片断,所有的值都是唯一的。这个函数对不同类型的片子的工作方式是一样的。你只需要用另一个选定的类型替换所有出现的类型string 。