【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{}

目录
相关文章
|
3月前
|
Go
golang力扣leetcode 238.除自身以外数组的乘积
golang力扣leetcode 238.除自身以外数组的乘积
17 0
|
3月前
|
Go
golang力扣leetcode 152.乘积最大子数组
golang力扣leetcode 152.乘积最大子数组
31 0
|
3月前
|
Go
golang力扣leetcode 954.二倍数对数组
golang力扣leetcode 954.二倍数对数组
17 0
|
3月前
|
Go
golang力扣leetcode 34.在排序数组中查找元素的第一个和最后一个位置
golang力扣leetcode 34.在排序数组中查找元素的第一个和最后一个位置
70 0
|
3月前
|
Go
golang力扣leetcode 462.最少移动次数使数组元素相等II
golang力扣leetcode 462.最少移动次数使数组元素相等II
34 0
|
3月前
|
Java Go C++
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
35 0
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
|
3月前
|
Java Go C++
Golang每日一练(leetDay0088) 数组的乘积、搜索二维矩阵II
Golang每日一练(leetDay0088) 数组的乘积、搜索二维矩阵II
28 0
Golang每日一练(leetDay0088) 数组的乘积、搜索二维矩阵II
|
3月前
|
Java Go C++
Golang每日一练(leetDay0081) 基本计算器I\II Basic Calculator
Golang每日一练(leetDay0081) 基本计算器I\II Basic Calculator
29 0
Golang每日一练(leetDay0081) 基本计算器I\II Basic Calculator
|
3月前
|
算法 C++ Python
Golang每日一练(leetDay0052) 寻找旋转排序数组中的最小值I\II
Golang每日一练(leetDay0052) 寻找旋转排序数组中的最小值I\II
33 0
Golang每日一练(leetDay0052) 寻找旋转排序数组中的最小值I\II
|
3月前
|
C++ Python Go
Golang每日一练(leetDay0051) 颠倒字符串里的单词I\II、乘积最大子数组
Golang每日一练(leetDay0051) 颠倒字符串里的单词I\II、乘积最大子数组
26 0
Golang每日一练(leetDay0051) 颠倒字符串里的单词I\II、乘积最大子数组