golang 类似set使用

来源:互联网 发布:数据科学导论 编辑:程序博客网 时间:2024/05/16 10:43
     本文借鉴一篇博客,原文链接: http://www.jb51.net/article/56828.htm


    实现向python或者javaScript的set功能,golang中本身没有这个功能,现在可以自己写类似set的功能

    代码如下:

     

package mainimport(  "fmt"  "sync")type Set struct {  m map[int]bool  sync.RWMutex}func New() *Set {        //创建一个set对象  return &Set{    m: map[int]bool{},  }}func (s *Set) Add(item int) {     // 向集合中添加 item 元素  s.Lock()  defer s.Unlock()  s.m[item] = true}func (s *Set) Remove(item int) {      // 移除集合 item 元素  s.Lock()  s.Unlock()  delete(s.m, item)}func (s *Set) Has(item int) bool {         // 判断集合是否存在 item 元素  s.RLock()  defer s.RUnlock()  _, ok := s.m[item]  return ok}func (s *Set) Len() int {           // 获取集合的长度[元素个数]  return len(s.List())}func (s *Set) Clear() {             // 清空集合所有元素  s.Lock  defer s.Unlock()  s.m = map[int]bool{}}func (s *Set) IsEmpty() bool {        // 判断集合是否为空  if s.Len() == 0 {    return true  }  return false}func (s *Set) List() []int {             // 集合列表  s.RLock()  defer s.RUnlock()  list := []int{}  for item := range s.m {    list = append(list, item)  }  return list}func main() {  // 初始化  s := New()    s.Add(1)  s.Add(1)  s.Add(2)  s.Clear()  if s.IsEmpty() {    fmt.Println("0 item")  }    s.Add(1)  s.Add(2)  s.Add(3)    if s.Has(2) {    fmt.Println("2 does exist")  }    s.Remove(2)  s.Remove(3)  fmt.Println("list of all items", S.List())}     以此共勉...        



     

1 0
原创粉丝点击