数据结构封装

集合

方法:

添加 是否含有某元素  删除等

并集 交集 差集 子集

function Set() {
        this.items = {};
        // add添加元素
        Set.prototype.add = (value) => {
          // 判断集合中是否已包含该元素
          if (this.has(value)) return false;
          this.items[value] = value;
          return true;
        };
        // 判断集合中是否已包含该元素
        Set.prototype.has = function(value)  {
          return this.items.hasOwnProperty(value);
        };
        // remove
        Set.prototype.remove = (value) => {
          if (!this.has(value)) return false;
          delete this.items[value];
        };
        // clear
        Set.prototype.clear = () => {
          this.items = {};
        };
        // size
        Set.prototype.size = function()  {
          return Object.keys(this.items).length;
        };
        // 读取集合中所有的键
        Set.prototype.values =function () {
          return Object.keys(this.items);
        };
        // 并集
        Set.prototype.union = function (otherSet) {
          var unionSet = new Set();
          for (let value in this.items) {
            unionSet.add(value);
          }

          for (let value in otherSet.items) {
            unionSet.add(value);
          }
          return unionSet;
        };
        // 交集
        Set.prototype.intersection = function (otherSet) {
          var intersectionSet = new Set();
          for (let value in this.items) {
            if(otherSet.has(value)){
                intersectionSet.add(value);
            }
          }
          return intersectionSet;
        };

        // 差集
        Set.prototype.difference = function (otherSet) {
          var differenceSet = new Set();
          for (let value in this.items) {
            if (!otherSet.has(value)) {
              differenceSet.add(value);
            }
          }
          return differenceSet;
        };

        // 子集
        Set.prototype.subset =function (otherSet) {
          for (let value in this.items) {
            if (!otherSet.has(value)) {
              return false;
            }
          }
          return true
        };
      }

测试

      // test
      var set = new Set();
      set.add("first");
      set.add("second");
      set.add("second");
      set.add("third");
      set.add("abc");
      console.log(set);
      set.remove("first");
      console.log(set);
      console.log(set.size());
      set.add("111");
      console.log("set", set.values());
      console.log(set.has("first"));
      console.log(set.has("111"));
      console.log("~~~~~~~~~~");
      var setA = new Set();
      setA.add("abc");
      setA.add("first");
      setA.add("new");
      setA.add("111");
      console.log("setA", setA.values());
      var unionSet = set.union(setA);
      console.log("unionSet", unionSet.values());
      var jiao = set.intersection(setA);
      console.log("intersection", jiao.values());
      var difSet = set.difference(setA);
      console.log(" difSet", difSet.values());
      console.log('set',set.items);
      console.log('setA',setA.items);
      var sub=set.subset(setA)
      console.log('sub',sub);

控制台输出

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值