• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

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

    发布者: 竹韵9933 | 发布时间: 2025-8-14 05:22| 查看数: 71| 评论数: 0|帖子模式

    背景

    要求写一个方法,返回去重后的数组。数组的类型可能是
    1. int64
    复制代码
    ,也可能是
    1. string
    复制代码
    ,或是其他类型。
    如果区分类型的话,每增加一个新的类型都需要重新写一个方法。
    示例代码
    1. //对int64数组进行去重
    2. func DeDuplicateInt64Slice(array []int64) []int64 {
    3.         mp := make(map[int64]struct{})
    4.         idx := 0
    5.         for _, value := range array {
    6.                 if _, ok := mp[value]; ok {
    7.                         continue
    8.                 }
    9.                 array[idx] = value
    10.                 idx = idx + 1
    11.                 mp[value] = struct{}{}
    12.         }
    13.         return array[:idx]
    14. }

    15. //对string数组进行去重
    16. func DeDuplicateStringSlice(array []string) []string {
    17.         mp := make(map[string]struct{})
    18.         idx := 0
    19.         for _, value := range array {
    20.                 if _, ok := mp[value]; ok {
    21.                         continue
    22.                 }
    23.                 array[idx] = value
    24.                 idx = idx + 1
    25.                 mp[value] = struct{}{}
    26.         }
    27.         return array[:idx]
    28. }
    复制代码
    使用泛型实现后的代码
    1. //对数组去重
    2. func DeDuplicateSlice[T any](array []T) []T {
    3.         mp := make(map[any]struct{})
    4.         idx := 0
    5.         for _, value := range array {
    6.                 if _, ok := mp[value]; ok {
    7.                         continue
    8.                 }
    9.                 array[idx] = value
    10.                 idx = idx + 1
    11.                 mp[value] = struct{}{}
    12.         }
    13.         return array[:idx]
    14. }
    复制代码
    其中:
    T 是类型参数,在函数体里的用法跟其他数据类型(如
    1. int
    复制代码
    一样)
    any 是类型约束,这里的any可以是任何类型,也就是没有约束
    1. // any is an alias for interface{} and is equivalent to interface{} in all ways.
    2. type any = interface{}
    复制代码
    到此这篇关于Golang使用泛型对数组进行去重的实现的文章就介绍到这了,更多相关Golang数组去重内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:互联网
    免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表