数据结构之 - set集合

28 阅读1分钟
let MySet = function () {
  let items = {};

  // 检查元素是否存在
  this.has = function (ele) {
    return items.hasOwnProperty(ele);
  };

  // 添加
  this.add = function (value) {
    if (!items.has(value)) {
      items[value] = value;
      return value;
    }
    return false;
  };

  this.remove = function (value) {
    if (items.has(value)) {
      delete items[value];
      return items[value];
    }
    return false;
  };

  this.getItems = function () {
    return items;
  };

  this.clear = function () {
    items = {};
  };
  this.size = function () {
    return Object.keys(items).length;
  };
  this.value = function () {
    let values = [];
    for (let i in items) {
      if (items.hasOwnProperty(i)) {
        values.push(i);
      }
    }
    return values;
  };

  // 交集
  this.intersection = function (otherSet) {
    let resultSet = new MySet();

    let arr = this.value();

    for (let i = 0; i < arr.length; i++) {
      if (otherSet.has(arr[i])) {
        resultSet.add(arr[i]);
      }
    }
    return resultSet;
  };

  // 并集
  this.union = function (otherSet) {
    let result = new MySet();

    let arr = this.value();
    for (let i = 0; i < arr.length; i++) {
      result.add(arr[i]);
    }
    arr = otherSet.value();
    for (let i = 0; i < arr.length; i++) {
      result.add(arr[i]);
    }
  };

  // 差集
  this.difference = function (otherSet) {
    let resultSet = new MySet();

    let arr = this.value();

    for (let i = 0; i < arr.length; i++) {
      if (!otherSet.has(arr[i])) {
        resultSet.add(arr[i]);
      }
    }
    return resultSet;
  };
};