go实现一个set

本文介绍了如何使用Go1.18beta1的泛型特性实现一个set。通过封装map并提供常用操作,实现了通用类型的set。文章包含背景介绍、设计思想、代码展示以及单元测试。
摘要由CSDN通过智能技术生成

go实现一个set

背景

go语言底层一直没有set这种数据结构,在实际的开发中总是使用 map 来进行代替,但总感觉非常别扭。最近go1.18beta1 发布支持泛型,这让set通用类型的实现非常容易。目前这个还是不稳定的,官方 go 1.18 稳定版本要到 2022年2月份正式发布。

设计思想

使用底层还是使用map来实现,结合泛型,set中可以随意存放任何类型。利用map的一些api,封装set常用的函数

准备工作

  1. 下载 go1.18beta1
    在这里插入图片描述
  2. 将go1.18 配置到PATH路径下。
  3. 执行 go version 显示 go version go1.18beta1 则表示成功

代码

package setutil

import "fmt"

// Set 利用泛型,定义一个泛型类型(set), 泛型的写法使用中括号,comparable是新增的一个内置类型
type Set[T comparable] map[T]struct{
   }

// Add 向set中添加元素
func (s Set[T]) Add(v T) {
   
	s[v] = struct{
   }{
   }
}

// AddAll 向set中添加多个元素
func (s Set[T]) AddAll(vs ...T) {
   
	for i := 0; i < len(vs); i++ {
   
		s[vs[i]] = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值