Golang使用泛型对数组进行去重的实现

 更新时间:2025年02月20日 09:54:37   作者:想喝奶茶_  
本文主要介绍了Golang使用泛型对数组进行去重的实现,通过使用类型参数T和类型约束any,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

背景

要求写一个方法,返回去重后的数组。数组的类型可能是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{}

到此这篇关于Golang使用泛型对数组进行去重的实现的文章就介绍到这了,更多相关Golang数组去重内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • Go语言hello world实例

    Go语言hello world实例

    这篇文章主要介绍了Go语言hello world实例,本文先是给出了hello world的代码实例,然后对一些知识点和技巧做了解释,需要的朋友可以参考下
    2014-10-10
  • 浅析Go 字符串指纹

    浅析Go 字符串指纹

    这篇文章主要介绍了Go 字符串指纹的相关资料,帮助大家更好的理解和学习go语言,感兴趣的朋友可以了解下
    2020-09-09
  • go mod tidy拉取依赖包bug问题及解决

    go mod tidy拉取依赖包bug问题及解决

    这篇文章主要介绍了go mod tidy拉取依赖包bug问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • golang gorm 计算字段和获取sum()值的实现

    golang gorm 计算字段和获取sum()值的实现

    这篇文章主要介绍了golang gorm 计算字段和获取sum()值的实现操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Go项目中的GOPROXY设置

    Go项目中的GOPROXY设置

    GOPROXY是Go语言中用于指定模块代理服务器的环境变量,设置GOPROXY可以通过操作系统环境变量、Go命令行参数或Go环境配置文件进行,感兴趣的可以了解一下
    2024-09-09
  • Go语言之重要数组类型切片(slice)make,append函数解读

    Go语言之重要数组类型切片(slice)make,append函数解读

    这篇文章主要介绍了Go语言之重要数组类型切片(slice)make,append函数用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • golang编程入门之http请求天气实例

    golang编程入门之http请求天气实例

    这篇文章主要介绍了golang编程入门之http请求天气实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Go Java算法之二叉树的所有路径示例详解

    Go Java算法之二叉树的所有路径示例详解

    这篇文章主要为大家介绍了Go Java算法之二叉树的所有路径示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • go语言静态库的编译和使用方法

    go语言静态库的编译和使用方法

    这篇文章主要介绍了go语言静态库的编译和使用方法,本文以windows平台为例,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 在Golang中实现RSA算法的加解密操作详解

    在Golang中实现RSA算法的加解密操作详解

    RSA 是一种非对称加密算法,广泛使用于数据的安全传输,crypto/rsa 是 Golang 中实现了 RSA 算法的一个标准库,提供了生成公私钥对、加解密数据、签名和验签等功能,本文给大家介绍了在Golang中实现RSA算法的加解密操作,需要的朋友可以参考下
    2023-12-12

最新评论