内容简介:在
在 Go
语言中是否有 Set
实现?
Set
是一种集合类数据结构,可以用来存储一系列的值,这些值无顺序,且不能重复。
Go
标准库中是没有的,不过我们可以通过原生的 map
自己实现。
map
可以用来存储 key-value
数据集合, key
默认无序,且不能重复,正好符合 set
的集合属性。
可以像这样定义一个类型的 set 结构:
var InterfaceSet map[interface{}]bool
var IntSet map[int]bool
var StringSet map[string]bool
甚至可以把 map
中的 value
的值用 struct{}
代替, stuct{}
是 0 个字节,bool 是 1 个字节。
var InterfaceSet map[interface{}]struct{}
var IntSet map[int]struct{}
var StringSet map[string]struct{}
以一个 string set
为例,看看如何操作 set
:
// 声明一个 string set
s := make(map[string]struct{})
// set 中添加元素
s["Bingo"] = struct{}{}
s["Huang"] = struct{}{}
// set 中查询某个元素是否存在(判断 exist 为 true 还是 false)
_, exist := s["Bingo"]
// set 中删除某个元素
delete(s, "Bingo")
// 遍历 set 中所有元素
for v := range s {
fmt.Println(v)
}
以上是最简单的实现版本,但是不够直观,我们可以封装成更友好的方式,提供增删改查方法,如下:
package main
import (
"fmt"
)
type set struct {
m map[string]struct{}
}
func NewSet() *set {
s := &set{}
s.m = make(map[string]struct{})
return s
}
func (s *set) Add(v string) {
s.m[v] = struct{}{}
}
func (s *set) Contains(v string) bool {
_, c := s.m[v]
return c
}
func (s *set) Remove(v string) {
delete(s.m, v)
}
func main() {
s := NewSet()
s.Add("Bingo")
s.Add("Huang")
fmt.Println(s.Contains("Bingo"))
fmt.Println(s.Contains("Huang"))
s.Remove("Bingo")
fmt.Println(s.Contains("Bingo"))
}
我把这段代码放在了 GitHubGist 中 golang-set 。
如果你还要考虑线程安全,或者更地道的实现,可以看看这个 Github仓库 ,还被 Docker 、Kubernetes用到了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- tinyscript 1.2.0 发布了,注重集合类处理的脚本语言
- Scala 中的集合(二):集合性能比较
- Scala 中的集合(二):集合性能比较
- 《面试知识,工作可待:集合篇》:Java 集合面试知识大全
- 如何对集合对象求合计,然后追加在该集合对象中
- MongoDB指南---14、特殊的索引和集合:固定集合、TTL索引、全文本索引
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Google's PageRank and Beyond
Amy N. Langville、Carl D. Meyer / Princeton University Press / 2006-7-23 / USD 57.50
Why doesn't your home page appear on the first page of search results, even when you query your own name? How do other web pages always appear at the top? What creates these powerful rankings? And how......一起来看看 《Google's PageRank and Beyond》 这本书的介绍吧!
HTML 编码/解码
HTML 编码/解码
正则表达式在线测试
正则表达式在线测试