今日、同社との間で設定差はないダウン図書館で、二つの配列を必要とし、それは独立しており、私は読者に役立つ願っています
パッケージモデルの インポート( " ソート" " 同期" ) の設定を入力のstruct { sync.RWMutex型の m個のマップを[ INT ] BOOL } // 新建集合对象 FUNC新(項目... int型)* 集合{ S: =&集合{ M:作る(マップ[ INT ] BOOL 、LEN(アイテム))、 } s.Add(項目...) 戻りS } // 添加元素 FUNC(S *セット)を追加(アイテムは... int型){ s.Lock( ) s.Unlockを延期します() するため =:_、V レンジ項目{ SM [V] = 真 } } // 删除元素 (項目を削除... FUNC(S *セット)INT ){ s.Lock()は Sを延期。 ()ロックを解除 するために _、V:= レンジ項目{ (SM、v)を削除 } } // 判断元素是否存在 FUNC(S *セット)(項目...持ってint型)BOOL { s.RLock()は Sを延期。 RUnlock() のための _、V:= 範囲項目{ なら _、OK:= SM [V]。!OK { 返す falseに } } リターン をtrueに } // 要素の数 FUNC(セットS *)カウント()int型{ 返すLEN(SM) } // 空集合 FUNC(S * セット)クリア(){ s.Lockを() 延期S .Unlock() SM =マップ[ INT ] BOOL {} } // ヌル集合の決意の FUNC(S *セット)が空()BOOL { 戻り LEN(SM)== 0 } // 順序なしリスト FUNC(S *セット)リスト()[] INT { s.RLock() 延期s.RUnlock() リスト: =を作る([] INT、0 、LEN(SM)) のための項目:= 範囲SM { リスト = 追加(リスト項目) } 戻りリスト } // 排序列表 FUNC(S *セット)sortlistが()[] INT { s.RLock() s.RUnlock()延期 リスト: =([]作るINT、0 、LEN(SM))を するための項目:= 範囲SM { リスト = 追加(リスト項目) } sort.Ints(リスト) リターンリスト } // 并集の FUNC(S *セット)連合(セット... *セット)* 集合{ R: = 新(s.List()...) のために _、設定:= レンジセットを{ のための E: =範囲設定.M { RM [E] = 真 } } 戻りR } // 差集 FUNC(S *セット)マイナス(セット... *セット)* 集合{ R: = 新しい(s.List()。 ..) 用 _、セット:= レンジセット{ ための E:=レンジセット.M { もし _、OK:= SM [E]。[OK] { 削除(RM、E) } } } 戻りR } // 交集 FUNC(S *セット)交差(セット... *セット)* 集合{ R: = 新(s.List()...) について _、設定:= レンジセット{ ための E:= レンジSM { なら OK、_:= 設定 .M [E]。!OK { 削除(RM、E) } } } 戻りR } //补集 FUNC(S *セット)補体(フル・セット)* 集合{ :R = 新しい() のための E:= レンジfull.m { なら _、OK:= SM [E]。!OK { r.Add(E) } } 戻りR }
ありがとう、ありがとう!