Golang 从数组中删除重复元素

在开发 Golang 应用程序时,删除数组中的重复元素是一项常见任务。 删除重复元素使数据操作减少冗余,减少内存使用,并加速操作。



在本文中,我们将探讨如何在 Golang 中删除数组中的重复元素。

我们将从两个不同的方法开始:使用 map 和不使用 map。 我们将使用以下示例数组来演示这些方法:

package main

import "fmt"

var arr = [...]int{1, 2, 2, 3, 4, 4, 4, 5, 5}

1. 使用 Map 方法

使用 Map 方法,我们将创建一个定义为 map [int] bool 的映射结构,该结构将用于存储数组中的唯一值。 遍历数组中的每个元素,并将其作为 map 的键(Key)。 如果存在该键,则该元素被视为重复项,首次出现唯一项将被添加到新的无重复项联机。 最后,我们将整理新数组的元素,这将保持它们在原始数组中的相对位置。

以下是使用 Map 方法实现 Golang 中删除数组中的重复元素的示例代码:

package main

import "fmt"

var arr = [...]int{1, 2, 2, 3, 4, 4, 4, 5, 5}

func removeDuplicates(arr []int) []int {
    uniqueSet := make(map[int]bool)
    var uniqueArr []int
    for _, v := range arr {
        if !uniqueSet[v] {
            uniqueSet[v] = true
            uniqueArr = append(uniqueArr, v)
        }
    }
    return uniqueArr
}

func main() {
    fmt.Println(removeDuplicates(arr[:]))
}

以上方法输出结果:

[1 2 3 4 5]

2. 不使用 Map 方法

如果我们不使用映射结构来删除重复元素,那么我们需要两个索引变量:一个原始数组的索引和一个新数组的索引。 我们遍历原始数组中的每个元素并检查它是否等于新数组中的最后一个元素,如果它不是,我们就添加它。

以下是不使用 Map 方法的实现 Golang 中删除数组中的重复元素的示例代码:

package main

import "fmt"

var arr = [...]int{1, 2, 2, 3, 4, 4, 4, 5, 5}

func removeDuplicates(arr []int) []int {
    j := 0
    for i := 1; i < len(arr); i++ {
        if arr[j] != arr[i] {
            j++
            arr[j] = arr[i]
        }
    }
    return arr[:j+1]
}

func main() {
    fmt.Println(removeDuplicates(arr[:]))
}

以上方法输出结果:

[1 2 3 4 5]