JS数据结构与算法 —— 集合,并集,交集,补集

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mr_JavaScript/article/details/85240090

概念:集合是由一组无序且唯一(每个元素只出现一次)的项组成的一组数据。其与数学里的集合是同一个概念。在ES6里已经引入了集合的数据结构概念——Set类。

分类:常见的有空集,并集,交集,差集。

应用场景:1)数据去重;2)用于存储一些独一无二的数据。

js实现一个集合

集合的特性类似于JavaScript数据类型里的Object,Object对象里的每个键都是唯一。下面用一个名为item的对象表示集合去实现一个简单的集合类。其中集合里的元素是以{value:value}值值对的形式存储的

定义Skipper类,表示集合,其中包含了如下几个操作方法:

class Skipper{
    constructor(){
        this.item = {};    // 一个集合(值值对,如value : value)
    }
    /* 查找 */
    has(element){           
        return this.item.hasOwnProperty(element);
    }
    /* 添加 */
    add(element){           
        if(!this.has(element)){
            this.item[element] = element;
            return 'success';
        }else{
            return '该元素已存在';
        }
    }
    /* 删除 */
    remove(element){        
        if(this.has(element)){
            delete this.item[element];
            return 'success';
        }else{
            return '该元素不存在';
        }
    }
    /* 清空元素 */
    clear(){                
        this.item = {};
    }
     /* 查看集合大小 */
    size(){                
        return Object.keys(this.item).length;    // 由item对象的键组成的数组的长度
    }
    /* 提取集合所有元素并组合成的一个数组 */
    values(){               
        let arr = [];
        for(let key in this.item){
            arr.push(this.item[key]);
        }
        return arr;
    }
}

并集类

给定两个集合A,B,把他们所有的元素合并在一起组成的集合,叫做集合A与集合B的并集,记作A∪B,读作A并B。

class Union{
    getSkipper(A,B){
        let result = new Skipper();
        A.values().forEach(element=>{            // 遍历第一个集合
            result.add(element);   // add()已去重
        });
        B.values().forEach(element=>{       // 遍历第二个集合
            result.add(element);
        });
        return result;
    }
}

交集类

AB是两个集合,由所有属于集合A属于集合B的元素所组成的集合,叫做集合A与集合B交集(intersection),记作AB

class Intersection{
    getSkipper(A,B){
        let result = new Skipper()
        A.values().forEach(element=>{
            if(B.has(element)){
                result.add(element);    
            }
        });
        return result
    }
}

补集类

A中所有不属于B的元素组成的集合,叫做子集BA中的补集,又称差集。

class Difference{
    getSkipper(A,B){
        let result = new Skipper();
        A.values().forEach(element=>{
            if(!B.has(element)){
                result.add(element);
            }
        });
        return result;
    }
}

(完)

猜你喜欢

转载自blog.csdn.net/Mr_JavaScript/article/details/85240090