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就是对应的值,否则返回false
		if _, ok := tmp[val]; !ok {
			tmp[val] = 1 // 将切片的值作为map key放入map中,值随便,这里给个1
			list = 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]
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值