📌  相关文章
📜  如何从 Golang 中的切片中删除重复值?

📅  最后修改于: 2021-10-24 14:19:15             🧑  作者: Mango

数组是一种数据结构。同样,在 Golang 中,我们有切片,它比数组更灵活、更强大、更轻量、更方便。由于切片比数组更灵活,因此其灵活性取决于其大小。就像数组一样,它有索引值和长度,但它的大小不是固定的。当我们声明一个切片时,我们不指定它的大小。
句法:

[]mySlice;
 OR
[]mySlice{};
OR
[]mySlice{input1, input2, .........input n}

而且,切片和数组相互连接,在切片中,有对底层数组的引用。在切片中,我们可以存储重复的元素。
示例:在这里,我们将看到如何从切片中删除重复元素。我们已经定义了一个函数,我们在其中传递切片值并使用 map函数检查重复项并删除它们。

C
// Golang program to remove duplicate
// values from Slice
package main
 
import (
    "fmt"
)
 
func removeDuplicateValues(intSlice []int) []int {
    keys := make(map[int]bool)
    list := []int{}
 
    // If the key(values of the slice) is not equal
    // to the already present value in new slice (list)
    // then we append it. else we jump on another element.
    for _, entry := range intSlice {
        if _, value := keys[entry]; !value {
            keys[entry] = true
            list = append(list, entry)
        }
    }
    return list
}
 
func main() {
 
    // Assigning values to the slice
    intSliceValues := []int{1,2,3,4,5,2,3,5,7,9,6,7}
 
    // Printing original value of slice
    fmt.Println(intSliceValues)
 
    // Calling function where we
    // are removing the duplicates
    removeDuplicateValuesSlice := removeDuplicateValues(intSliceValues)
 
    // Printing the filtered slice
    // without duplicates
    fmt.Println(removeDuplicateValuesSlice)
}


输出:

[1 2 3 4 5 2 3 5 7 9 6 7]
[1 2 3 4 5 7 9 6]

解释:

  • 在 main函数,我们已经声明了一个切片。我们还打印了切片的原始值。
  • 我们已经定义了一个函数,我们在其中传递切片原始值并检查重复项。
  • 重复检查的逻辑:为此,我们定义了另一个切片,并通过检查该值是否已存在于新切片中来分配第一个值。它返回没有重复的切片。
  • 我们正在从主函数调用removeDuplicateValues函数,其中打印了函数的返回切片。