Go 语言简单实现HashSet

Bryce · · 2431 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

公司有个需求,就是能够对列表去重。本屌原本想直接用for循环实现,后来去查了查Java的实现方式,大开眼界。

Set,是指数学里的集合。集合当中不能有重复的元素。判断是否有重复,可以使用哈希的方法。Java容器当中有基于哈希实现的HashSet。把元素都放入HashSet当中,如果有重复,则会插入失败。这样就能判断出来是否重复了。

而Golang并没有这种高级的容器。只是找了一个大神实现的,稍微改了一下,能够支持字符串检测。

http://play.golang.org/p/_FvECoFvhq

type HashSet struct {
	set map[string]bool
}

func NewHashSet() *HashSet {
	return &HashSet{make(map[string]bool)}
}

func (set *HashSet) Add(i string) bool {
	_, found := set.set[i]
	set.set[i] = true
	return !found //False if it existed already
}

func (set *HashSet) Get(i string) bool {
	_, found := set.set[i]
	return found //true if it existed already
}

func (set *HashSet) Remove(i string) {
	delete(set.set, i)
}

内部使用map来保存哈希结果。而哈希函数直接就是使用字符串作为哈希结果。


######参考文献 + 【1】判断int数组中的元素是否重复 - 百度知道 + 【2】Sets Data Structure in Golang - StackExchange + 【3】java里有没有专门判断List里有重复的数据?最好能知道是第几行重复. - CSDN论坛

原文链接:Go 语言简单实现HashSet,转载请注明来源!


有疑问加站长微信联系(非本文作者)

本文来自:Cyeam

感谢作者:Bryce

查看原文:Go 语言简单实现HashSet

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:1006366459

2431 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传