ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

集合

2022-01-12 18:31:09  阅读:143  来源: 互联网

标签:Set setB var add values 集合


集合通常是一组无序的,不能重复的元素构成,常见的实现方式是哈希表

集合可以看成是一个特殊的数据:

  1. 里面的元素没有顺序,也不能重复
  2. 没有顺序意味着不能通过下标值进行访问,不能重复意味着相同的对象在集合中只会存在一份

集合的操作

<1>  add(value):向集合添加一个新的项

<2>  remove(value):从集合移除一个值

<3>  has(value):如果值在集合中,返回true,否则返回false

<4>  clear():移除集合中的所有的项

<5>  size():返回集合所包含元素的数量,与数组的length属性类似

<6>  values():返回一个包含集合中所有值的数组

 

操作方法的封装

 //封装集合类
    function Set() {
        this.items = {}
        //add方法
        Set.prototype.add = function (value) {
            //判断当前集合中是否包含元素
            if (this.has(value)) return false
            //将元素添加到集合中
            this.items[value] = value
            return true
        }
        //has方法
        Set.prototype.has = function (value) {
            return this.items.hasOwnProperty(value)
        }
        //remove方法
        Set.prototype.remove = function (value) {
            //判断集合中是否有这个元素
            if (!this.has(value)) return false
            //如果包含
            delete this.items[value]
            return true
        }
        //clear方法
        Set.prototype.clear = function () {
            this.items = {}
        }
        //size方法
        Set.prototype.size = function () {
            return Object.keys(this.items).length
        }
        //values方法
        Set.prototype.values = function () {
            return Object.keys(this.items)
        }
    }

 

集合间的操作

并集:对于给定的两个集合,返回一个包含两个集合中所有元素的新集合

交集:对于给定的两个集合,返回一个包含两个集合中共有元素的新集合

差集:对于给定的两个集合,返回一个包含所有存在于第一个集合且不存在于第二个集合的元素的新集合

并集:验证一个给定集合是否是另一集合的子集

 

 

1、并集

       //并集
        Set.prototype.union = function (otherSet) {
            var unionSet = new Set()
            //将集合中的元素添加到新集合中
            var values = this.values()
            for (var i = 0; i < values.length; i++) {
                unionSet.add(values[i])
            }
            //取出旧集合的元素,判断是否需要添加到新集合
            values = otherSet.values()
            for (var i = 0; i < values.length; i++) {
                unionSet.add(values[i])
            }
            return unionSet
        }

测试

  var setA = new Set()
    var setB= new Set()
    setA.add('a')
    setA.add('b')
    setA.add('c')
    setB.add('d')
    setB.add('e')
    setB.add('f')
    //两个集合的并集
    alert(setA.union(setB).values())

 

 

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(otherSet.has(item)) {
                    intersectionSet.add(item)
                }
            }
            return intersectionSet
        }

测试:

  var setA = new Set()
    var setB = new Set()
    setA.add('a')
    setA.add('b')
    setA.add('c')
    setB.add('b')
    setB.add('c')
    setB.add('f')
    //两个集合的并集
    alert(setA.intersection(setB).values())

 

 

3、差集

//差集
        Set.prototype.difference= function (otherSet) {
            var differenceSet = new Set()
            //从A中取出元素判断是否在B中
            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
        }

测试:

 var setA = new Set()
    var setB = new Set()
    setA.add('a')
    setA.add('b')
    setA.add('c')
    setB.add('b')
    setB.add('c')
    setB.add('f')
    //两个集合的并集
    alert(setA.difference(setB).values())

 

 

4、子集

 //子集
        Set.prototype.subset = function (otherSet) {
            //遍历A中所有元素判断是否都在B中存在如果不存在返回false
            var values = this.values()
            for (var i = 0; i < values.length; i++) {
                var item = values[i]
                if (!otherSet.has(item)) return false
            }
            return true
        }

 

测试:

   var setA = new Set()
    var setB = new Set()
    setA.add('b')
    setA.add('c')
    setB.add('a')
    setB.add('b')
    setB.add('c')
    //两个集合的并集
    alert(setA.subset(setB))

 

标签:Set,setB,var,add,values,集合
来源: https://www.cnblogs.com/keyeking/p/15793644.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有