JS実装データ構造(五):集合


  • セットの一般的な実装は、ハッシュテーブル
  • である.
  • の集合は通常無秩序であり、重複できない要素
  • である.
  • 集合の特殊な点は、中の要素が順序がなく、繰り返すことができないことである.すなわち、下付き値ではアクセスできず、同じオブジェクトがセットに1部
  • しか存在しない.
  • ES 6にはすでにSetクラス
  • がある
  • 集合クラスのメソッド
  • add(value):新しいアイテム
  • をセットに追加
  • remove(value):セットから値
  • を削除します.
  • has(value):値がセットにある場合はtrueを返します.そうでない場合はfalse
  • を返します.
  • clear():コレクション内のすべてのアイテムを削除する
  • size():配列のlength属性と同様に、集合に含まれる要素の数を返します.
  • values():コレクション内のすべての値を含む配列
  • を返します.
  • パッケージ集合クラス
  • function Set(){
         
      //    
      this.items = {
         }
     
      //    
      //1.add()
      Set.prototype.add = function(value){
         
        //                
        if(this.has(value)) return false;
        this.items[value] = value;
        return true;
      }
      
      //2.has()
      Set.prototype.has = function(value){
         
    		return this.items.hasOwnProperty(value);
      }
      
      //3.remove()
      Set.prototype.remove = function(value){
         
      	//                
        if(!this.has(value)) return false;
        delete this.items[value];
        return true;
      }
      
      //4.clear()
      Set.prototype.clear = function(v){
         
    		this.items = {
         };
      }
      
      //5.size()
      Set.prototype.clear = function(v){
         
    		return Object.keys(this.items).length;
      }
      
      //6.value()
      Set.prototype.values = function(v){
         
    		return Object.keys(this.items);
      }
      
      
      //      
      //1.  
      Set.prototype.union = function(otherSet){
         
        var unionSet = new Set();
        var values = this.values();
        //  A     
        for(var i=0;i<values.length;i++){
         
          unionSet.add(values[i]);
        }
        //  B     
        values = otherSet.values();
        for(var i=0;i<values.length;i++){
         
          unionSet.add(values[i]);
        }
        return unionSet;    
      }
      
      //2.  
      Set.prototype.intersection = function(otherSet){
         
      	var intersectionSet = new Set();
        
        //           A B 
        var values = this.values();
        for(var i = 0;i<values.length;i++){
         
          var item = values[i];
          if(otehrSet.has(item)){
         
            intersectionSet.add(item);
          }
        }
        return intersectionSet;
      }
      
      //3.  
      Set.prototype.difference = function(otherSet){
         
        var differenceSet = new Set();
        var values = this.values();
        for(var i =0;i<values.length;i++){
         
          var item = values[i];
          if(!otherSet.has(item)){
         
            differenceSet.add(item)
          }
        }
        return differenceSet;
      }
      
      //3.  
      Set.prototype.subSet = function(otherSet){
         
      	var values = this.values();
        for(var i =0 ;i<values.length;i++){
         
          var item = values[i];
          if(!otherSet.has(item)){
         
            return false;
          }
        }
        return true;
    }```