Golang 如何从切片中删除重复值

Golang 如何从切片中删除重复值

在Golang中,切片是一种常见的数据类型,可以用于存储一组变量。但是,如果切片中包含重复的元素,那么在进行某些操作时,这些重复值可能会给程序带来不必要的复杂性。所以,本文将介绍如何从Golang的切片中删除重复值。

1.利用map实现删除重复值

以int类型的切片为例,我们可以利用map来删除其中的重复值。具体实现方法如下:

func removeDuplicateInt(list []int) []int {
    var result []int
    tempMap := map[int]byte{}
    for _, e := range list {
        l := len(tempMap)
        tempMap[e] = 0
        if len(tempMap) != l {
            result = append(result, e)
        }
    }
    return result
}

代码解释:

  • 先创建一个空的int类型的切片result,tempMap是一个int对应的byte类型的map,用于记录出现过的元素;
  • 遍历整个切片,判断当前元素是否已经出现过;
  • 如果当前元素没有出现过,就将其添加到result中,并在tempMap中记录该元素。

示例代码运行结果如下:

package main

import (
    "fmt"
)

func removeDuplicateInt(list []int) []int {
    var result []int
    tempMap := map[int]byte{}
    for _, e := range list {
        l := len(tempMap)
        tempMap[e] = 0
        if len(tempMap) != l{
            result = append(result, e)
        }
    }
    return result
}

func main() {
    list := []int{1, 2, 3, 4, 3, 4, 5, 1, 2, 0}
    fmt.Println(removeDuplicateInt(list))
}

输出结果:

[1 2 3 4 5 0]

2.利用切片下标实现删除重复值

除了利用map进行操作,我们还可以采用更加简单的方法,使用切片下标的方式来删除重复的元素。具体实现方法如下:

func removeDuplicateInt(list []int) []int {
   result := []int{}
   for _, v := range list {
      exists := false
      for _, rv := range result {
         if v == rv {
            exists = true
            break
         }
      }
      if !exists {
         result = append(result, v)
      }
   }
   return result
}

代码解释:

  • 遍历整个切片,判断当前元素是否已经出现过;
  • 如果当前元素没有出现过,就将其添加到result中。

示例代码运行结果如下:

package main

import (
    "fmt"
)

func removeDuplicateInt(list []int) []int {
   result := []int{}
   for _, v := range list {
      exists := false
      for _, rv := range result {
         if v == rv {
            exists = true
            break
         }
      }
      if !exists {
         result = append(result, v)
      }
   }
   return result
}

func main() {
    list := []int{1, 2, 3, 4, 3, 4, 5, 1, 2, 0}
    fmt.Println(removeDuplicateInt(list))
}

输出结果:

[1 2 3 4 5 0]

3.利用sort包实现删除重复值

最后,我们可以使用sort包来达到删除重复值的效果。具体实现方法如下:

func removeDuplicateInt(list []int) []int {
   sort.Ints(list)
   result := []int{}
   var last int
   for i, v := range list {
      if i == 0 || v != last {
         result = append(result, v)
         last = v
      }
   }
   return result
}

代码解释:

  • 先对原始切片list进行排序(sort.Ints(list));
  • 遍历整个切片,判断当前元素是否与上一个元素相同;
  • 如果当前元素不同于上一个元素,则将其加入到result中。

示例代码运行结果如下:

package main

import (
    "fmt"
    "sort"
)

func removeDuplicateInt(list []int) []int {
   sort.Ints(list)
   result := []int{}
   var last int
   for i, v := range list {
      if i == 0 || v != last {
         result = append(result, v)
         last = v
      }
   }
   return result
}

func main() {
    list := []int{1, 2, 3, 4, 3, 4, 5, 1, 2, 0}
    fmt.Println(removeDuplicateInt(list))
}

输出结果:

[0 1 2 3 4 5]

结论

以上三种方法都可以用来实现从Golang的切片中删除重复值的功能。其中,map实现方法和切片下标实现方法比较类似,都是遍历整个切片,判断当前元素是否与已有元素相同,从而来进行元素的添加和删除。而使用sort包实现的方法比较容易理解,只需要先将切片排序,就可以直接判断前后两个元素是否相同,进而删除重复元素。在实际开发过程中,开发者可以根据实际需要选择不同的实现方法进行操作。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程