go实现一个set
背景
go语言底层一直没有set这种数据结构,在实际的开发中总是使用 map 来进行代替,但总感觉非常别扭。最近go1.18beta1 发布支持泛型,这让set通用类型的实现非常容易。目前这个还是不稳定的,官方 go 1.18 稳定版本要到 2022年2月份正式发布。
设计思想
使用底层还是使用map来实现,结合泛型,set中可以随意存放任何类型。利用map的一些api,封装set常用的函数
准备工作
- 下载 go1.18beta1
- 将go1.18 配置到PATH路径下。
- 执行 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]] =