Golang Go语言中切片去掉重复的部分,求高效思路

Golang Go语言中切片去掉重复的部分,求高效思路
例如 1 2 3, 2 3 4 => 1 4; 1 2 3 1, 2 3 4=> 1 4
想到的是利用 map 的 key 唯一性,map[type]struct{}

6 回复

如果只是 int 型,位运算即可

更多关于Golang Go语言中切片去掉重复的部分,求高效思路的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


楼主这文字描述能力略差啊,我重新诠释一下你看对不对:
现有两个数集,称作 a b,先将各自转化为集合,再求 a-b

没看出来跟切片有啥联系啊。。

a:= []string{“1”,“2”,“3”} b :=[]string{“2”,“3”,“4”}, result := []string{“1”,“4”}

直接用 map 吧 不要折腾了。 我就是用的 map

在Go语言中,去掉切片中的重复元素是一个常见需求,可以通过多种方式实现高效去重。以下是一个高效思路:

  1. 使用map进行去重: Go语言中的map是一种哈希表结构,查找、插入和删除操作的时间复杂度均为O(1)。因此,可以利用map的键唯一性来快速去重。

    具体实现步骤:

    • 创建一个map,键为切片中的元素类型,值为bool(或其他任意类型,只用作占位)。
    • 遍历原切片,将每个元素作为键存入map中。
    • 遍历map的键,构建一个新的切片,存储去重后的元素。
  2. 示例代码

    func removeDuplicates(slice []int) []int {
        seen := make(map[int]bool)
        result := []int{}
        for _, v := range slice {
            if !seen[v] {
                seen[v] = true
                result = append(result, v)
            }
        }
        return result
    }
    
  3. 性能考虑

    • 这种方法的空间复杂度为O(n),因为需要额外的map来存储元素。
    • 时间复杂度为O(n),因为每个元素只会被遍历和插入一次。

通过这种方法,可以有效地去除切片中的重复元素,并且性能表现优异。对于大多数应用场景,这种方法都是推荐的选择。

回到顶部