golang實現set集合

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
package setimport ("bytes""fmt")func main() {}type HashSet struct {m map[interface{}]bool}func NewHashSet() *HashSet {return &HashSet{m: make(map[interface{}]bool)}}//添加    true 添加成功 false 添加失敗func (set *HashSet) Add(e interface{}) (b bool) {if !set.m[e] {set.m[e] = truereturn true}return false}//刪除func (set *HashSet) Remove(e interface{}) {delete(set.m, e)}//清除func (set *HashSet) Clear() {set.m = make(map[interface{}]bool)}//是否包含func (set *HashSet) Contains(e interface{}) bool {return set.m[e]}//擷取元素數量func (set *HashSet) Len() int {return len(set.m)}//判斷兩個set時候相同//true 相同 false 不相同func (set *HashSet) Same(other *HashSet) bool {if other == nil {return false}if set.Len() != other.Len() {return false}for k, v := range set.m {if !other.Contains(k) {return false}}return true}//迭代func (set *HashSet) Elements() []interface{} {initlen := len(set.m)snaphot := make([]interface{}, initlen)actuallen := 0for k, v := range set.m {if actuallen < initlen {snaphot[actuallen] = k} else {snaphot = append(snaphot, k)}actuallen++}if actuallen < initlen {snaphot = snaphot[:actuallen]}return snaphot}//擷取自身字串func (set *HashSet) String() string {var buf bytes.Bufferbuf.WriteString("set{")first := truefor k, v := range set.m {if first {first = false} else {buf.WriteString(" ")}buf.WriteString(fmt.Sprintf("%v", k))}buf.WriteString("}")return buf.String()}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.