首页 >后端开发 >Golang >如何高效去除Go切片中的重复元素?

如何高效去除Go切片中的重复元素?

Barbara Streisand
Barbara Streisand原创
2024-12-26 21:23:17258浏览

How to Efficiently Remove Duplicate Elements from a Go Slice?

从 Go 中的切片中删除重复的字符串或整数

问题:
你有一个切片可能包含重复条目的学生城市。您想要创建一个通用解决方案来删除任何切片中的所有重复字符串。

效率低下的解决方案:
您当前的解决方案涉及检查切片中的每个元素是否存在于另一个循环中,这对于大切片来说效率很低。

有效的解决方案:使用地图
一种有效的方法删除重复项就是使用映射来存储唯一元素。当您迭代切片时,检查当前元素是否存在于地图中。如果没有,请将其添加到地图和过滤结果中。

通用解决方案:
这是一个从任何切片中删除重复项的通用函数,其中 T 可以是任何可比较的类型:

func removeDuplicate[T comparable](sliceList []T) []T {
    allKeys := make(map[T]bool)
    list := []T{}
    for _, item := range sliceList {
        if _, value := allKeys[item]; !value {
            allKeys[item] = true
            list = append(list, item)
        }
    }
    return list
}

字符串和的具体解决方案整数:
为了简化代码,您还可以为字符串和整数创建特定函数:

func removeDuplicateStr(strSlice []string) []string {
    // [Remove duplicate code here]
}

func removeDuplicateInt(intSlice []int) []int {
    // [Remove duplicate code here]
}

用法示例:

studentsCities := []string{"Mumbai", "Delhi", "Ahmedabad", "Mumbai", "Bangalore", "Delhi", "Kolkata", "Pune"}

uniqueStudentsCities := removeDuplicate(studentsCities)
fmt.Println(uniqueStudentsCities) // Output: ["Mumbai", "Delhi", "Ahmedabad", "Bangalore", "Kolkata", "Pune"]

使用这种方法,您可以有效地从任何切片中删除重复项,无论其类型如何。

以上是如何高效去除Go切片中的重复元素?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn