【Golang】使用泛型对数组进行去重

简介: 【2月更文挑战第11天】使用泛型对数组进行去重

背景:
要求写一个方法,返回去重后的数组。数组的类型可能是int64,也可能是string,或是其他类型。
如果区分类型的话,每增加一个新的类型都需要重新写一个方法。
示例代码:

//对int64数组进行去重
func DeDuplicateInt64Slice(array []int64) []int64 {
   
    mp := make(map[int64]struct{
   })
    idx := 0
    for _, value := range array {
   
        if _, ok := mp[value]; ok {
   
            continue
        }
        array[idx] = value
        idx = idx + 1
        mp[value] = struct{
   }{
   }
    }
    return array[:idx]
}

//对string数组进行去重
func DeDuplicateStringSlice(array []string) []string {
   
    mp := make(map[string]struct{
   })
    idx := 0
    for _, value := range array {
   
        if _, ok := mp[value]; ok {
   
            continue
        }
        array[idx] = value
        idx = idx + 1
        mp[value] = struct{
   }{
   }
    }
    return array[:idx]
}

使用泛型实现后的代码

//对数组去重
func DeDuplicateSlice[T any](array []T) []T {
   
    mp := make(map[any]struct{
   })
    idx := 0
    for _, value := range array {
   
        if _, ok := mp[value]; ok {
   
            continue
        }
        array[idx] = value
        idx = idx + 1
        mp[value] = struct{
   }{
   }
    }
    return array[:idx]
}

其中:
T 是类型参数,在函数体里的用法跟其他数据类型(如int一样)
any 是类型约束,这里的any可以是任何类型,也就是没有约束

// any is an alias for interface{} and is equivalent to interface{} in all ways.
type any = interface{}

目录
相关文章
|
4月前
|
Go
golang力扣leetcode 238.除自身以外数组的乘积
golang力扣leetcode 238.除自身以外数组的乘积
31 0
|
4月前
|
Go
golang力扣leetcode 152.乘积最大子数组
golang力扣leetcode 152.乘积最大子数组
56 0
|
4月前
|
Go
golang力扣leetcode 954.二倍数对数组
golang力扣leetcode 954.二倍数对数组
26 0
|
4月前
|
Go
golang力扣leetcode 34.在排序数组中查找元素的第一个和最后一个位置
golang力扣leetcode 34.在排序数组中查找元素的第一个和最后一个位置
86 0
|
4月前
|
Go
golang力扣leetcode 462.最少移动次数使数组元素相等II
golang力扣leetcode 462.最少移动次数使数组元素相等II
55 0
|
15天前
|
Go
Golang语言之数组(array)快速入门篇
这篇文章是关于Go语言中数组的详细教程,包括数组的定义、遍历、注意事项、多维数组的使用以及相关练习题。
18 5
|
1月前
|
监控 Serverless Go
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
|
4月前
|
程序员 Go
第七章 Golang数组和切片
第七章 Golang数组和切片
40 2
|
4月前
|
Java Go C++
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
53 0
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
|
4月前
|
Java Go C++
Golang每日一练(leetDay0088) 数组的乘积、搜索二维矩阵II
Golang每日一练(leetDay0088) 数组的乘积、搜索二维矩阵II
37 0
Golang每日一练(leetDay0088) 数组的乘积、搜索二维矩阵II