Toc
  1. 创建集合
Toc
0 results found
FBB
数据结构之集合
2019/03/23 数据结构

学习JavaScript数据结构与算法之集合篇章。前端小白简单的学习笔记。

集合是由一组无序且唯一(即不能重复)的项组成的。

可以把集合想象成一个既没有重复元素,也没有顺序概念的数组。

创建集合

function Set() {
  var items = {}

  this.has = function (value) {        //判断该值是否在集合中,在则返回true,否则返回false
    return items.hasOwnProperty(value)
  }

  this.add = function (value) {         //向集合中添加元素
    if (!this.has(value)) {     //判断该值是否在集合中
      items[value] = value
      return true
    }
    return false
  }

  this.remove = function (value) {        //删除某个值
    if (this.has(value)) {             //判断集合中是否有这个值
      delete items[value]
      return true
    }
    return false
  }

  this.clear = function () {            //清空集合
    items = {}
  }

  this.size = function () {
    return Object.keys(items).length
  }

  this.values = function () {              //返回当前集合的元素
    return Object.keys(items)
  }

  this.union = function (otherSet) {         //求两个集合的并集
    var unionSet = new Set()                 //新建集合
    var values = this.values()
    values.forEach(item => {
      unionSet.add(item)
    })
    values = otherSet.values()
    values.forEach(item => {
      unionSet.add(item)
    })
    return unionSet
  }

  this.intersection = function (otherSet) {       //求两个集合的交集
    var intersectionSet = new Set()
    var values = this.values()
    values.forEach(item => {
      if (otherSet.has(item)) {
        intersectionSet.add(item)
      }
    })
    return intersectionSet
  }

  this.difference = function (otherSet) {         //求两个集合的差集
    var differenceSet = new Set()
    var values = this.values()
    values.forEach(item => {
      if (!otherSet.has(item)) {
        differenceSet.add(item)
      }
    })
    return differenceSet
  }

  this.subSet = function (otherSet) {               //求当前集合是否是另一个集合的子集
    if (this.size() > otherSet.size()) {
      return false
    } else {
      var values = this.values
      values.forEach(item => {
        if (!otherSet.has(item)) {
          return false
        }
        return true
      })
    }
  }
}

至此,集合的基本使用方法已经总结完毕。顺序性数据结构的学习已经结束了。接下来是散列和字典的学习,两种非序列性的数据结构。👍

打赏
支付宝
微信
本文作者:FBB
版权声明:本文首发于FBB的博客,转载请注明出处!