go语言切片去重的3种方式总结
package main
import (
"fmt"
"sort"
)
// 使用map进行去重
func unique1(s []int) []int {
m := make(map[int]bool)
for _, v := range s {
if _, ok := m[v]; !ok {
m[v] = true
}
}
result := make([]int, len(m))
i := 0
for k := range m {
result[i] = k
i++
}
return result
}
// 使用双重循环进行去重
func unique2(s []int) []int {
for i := 0; i < len(s)-1; i++ {
for j := i + 1; j < len(s); j++ {
if s[i] == s[j] {
s = append(s[:j], s[j+1:]...)
j--
}
}
}
return s
}
// 使用sort和双指针进行去重
func unique3(s []int) []int {
sort.Ints(s)
result := s[:1]
for _, v := range s[1:] {
if v != result[len(result)-1] {
result = append(result, v)
}
}
return result
}
func main() {
s := []int{1, 2, 2, 3, 4, 4, 5}
fmt.Println(unique1(s)) // 使用map去重
fmt.Println(unique2(s)) // 使用双重循环去重
fmt.Println(unique3(s)) // 使用sort和双指针去重
}
这段代码定义了3个去重函数,并在main函数中进行了测试。每个函数都使用不同的方法实现了切片去重,并返回去重后的结果。在main函数中,我们创建了一个包含重复元素的切片,并分别调用这三个去重函数,打印出去重后的结果。
评论已关闭