数据结构(四)集合-字典JS实现

数据结构(四)集合-字典JS实现

特点

集合是一种无序,包含的每个元素都是是唯一的数据结构。生活中常见的字典,哈希表就是集合的一种实现方式,

集合常见的操作

  • add(value):向集合添加一个新的项;
  • remove(value):从集合中移除一个值;
  • has(value):如果值在集合中,返回true,否则返回false
  • clear():移除集合中的所有项;
  • size():返回集合所包含元素的数量,与数组的length属性相似;
  • values():返回一个包含集合中所有值的数组

代码实现

class Set {
        constructor() {
          this.items = {}
        }

        add(value) {
          if (this.has(value)) return false

          this.items[value] = value
        }

        has(value) {
          return this.items.hasOwnProperty(value)
        }

        remove(value) {
          if (!this.has(value)) return false

          delete this.items[value]
          return true
        }

        clear() {
          this.items = {}
        }

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

        values() {
          return Object.keys(this.items)
        }
}        

集合间常见操作

        union(otherSet) {
          let newSet = new Set()
          let oldSet = this.values()
          for (const value of oldSet) {
            newSet.add(value)
          }
          for (const value of otherSet.values()) {
            newSet.add(value)
          }
          return newSet
        }

        interaction(otherSet) {
          let newSet = new Set()
          for (const value of otherSet.values()) {
            if (this.items.hasOwnProperty(value)) {
              newSet.add(value)
            }
          }
          return newSet
        }

        differ(otherSet) {
          let newSet = new Set()
          for (const value of this.values()) {
            if (!otherSet.items.hasOwnProperty(value)) {
              newSet.add(value)
            }
          }
          return newSet
        }

        isSub(otherSet) {
          let newSet = new Set()
          for (const value of otherSet.values()) {
            if (!this.items.hasOwnProperty(value)) {
              return false
            }
          }
          return true
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值