這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
公司有個需求,就是能夠對列表去重。本屌原本想直接用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] = truereturn !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,轉載請註明來源!