当前位置: 首页 > news >正文

go语言切片、数组去重函数SliceUnique 支持所有值是可比较类型的切片或者数组去重

我们在go语言开发的时候经常会需要对切片或者数组进行去重操作, 今天就给大家分享一个切片 或者数组去重的通用函数。

这里提醒大家注意go语言是严格区分数据类型的, 切片slice 和 数组 array是不同的数据类型, 不要混淆!!! 

切片去重函数,支持数组

对数组去重,在传递参数时需要使用[:]将数组转换为切片, 即  arr[:]


// 切片去重 支持所有切片值为可比较类型的切片进行去重操作
// @author tekintian@gmail.com (QQ: 932256355 )
func SliceUnique[E comparable](ss []E) []E {list := make([]E, 0)tmp := make(map[E]byte)for _, val := range ss {// v, ok := tmp[val]这个语法是判断tmp中是否有key为val的数据, 如果有 ok返回true, v就是对应的值,否则返回falseif _, ok := tmp[val]; !ok {tmp[val] = 1 // 将切片的值作为map key放入map中,值随便,这里给个1list = append(list, val)}}tmp = nil // 手动释放这个临时对象return list
}

Example测试用例


import "fmt"// 切片去重Example测试用例
func ExampleSliceUnique() {// 字符串切片cases := []string{"a", "b", "c", "d", "a", "b", "c", "e"}r1 := SliceUnique(cases)// 数字切片cs2 := []int{2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3, 4, 5, 6, 7, 8}r2 := SliceUnique(cs2)// 定义一个数组arr1 := [5]int{2, 2, 3, 4, 5}// 这里注意,SliceUnique函数的参数接收的是切片,所以必须使用[:]将数组转换为切片才行,// 否则编译报错 类型不匹配 type [5]int of arr1 does not match []E (cannot infer E)r3 := SliceUnique(arr1[:])fmt.Printf("r1: %v  r2: %v  r3: %v \n", r1, r2, r3)// output: r1: [a b c d e]  r2: [2 3 4 5 6 7 8 9 10]  r3: [2 3 4 5]
}

http://www.lryc.cn/news/356932.html

相关文章:

  • 微信小程序实现计算当前位置到目的地的距离
  • 灵动微单片机洗衣机方案——【软硬件开发支持】
  • EureKa是什么?
  • 【数据结构】直接选择排序详解!
  • vue3中的toRaw API
  • 接口响应断言-json
  • 全面盘点多模态融合算法及应用场景
  • 超分论文走读
  • Android ViewPager2 + FragmentStateAdapter 的使用以及问题
  • FPGA中的乒乓操作
  • gnocchi学习小结
  • 【机器学习】Pandas中to_pickle()函数的介绍与机器学习中的应用
  • lightning的hook顺序
  • 【ARFoundation自学03】AR Point Cloud 点云(参考点标记)功能详解
  • x264 码率控制中实现 VBV 算法源码分析
  • 宝兰德入选“鑫智奖·2024金融数据智能运维创新优秀解决方案”榜单
  • Unity3D雨雪粒子特效(Particle System)
  • 记录使用自定义编辑器做试题识别功能
  • MySQL索引和视图
  • Java单元测试Mock的用法,关于接口测试的用例
  • 《心理学报》文本分析技术最新进展总结盘点
  • json格式文件备份redis数据库 工具
  • JAVA系列:NIO
  • 偏微分方程算法之抛物型方程差分格式编程示例二
  • linux 查看 线程名, 线程数
  • python class __getattr__ 与 __getattribute__ 的区别
  • [ C++ ] 类和对象( 下 )
  • 这么多不同接口的固态硬盘,你选对了嘛!
  • 使用IDEA远程debug调试
  • 开源自定义表单系统源码 一键生成表单工具 可自由DIY表单模型+二开