数据结构5--集合

集合中的元素:无序,不能重复
集合类似于set

//封装set
function Set(){
    this.items = {}

    //查找
    Set.prototype.has = function(value){
        return this.items.hasOwnProperty(value);
    }
    //添加
    Set.prototype.add= function(value){
        if(this.has(value)) return false;

        this.items[value] =value;
    }
    //删除
    Set.prototype.del = function (value) {
        if(!this.has(value)) return false;
        delete this.items[value];

    }
    //清空集合
    Set.prototype.clear = function(){
        this.items ={}
    }
    //集合长度
    Set.prototype.size = function () {
        return Object.keys(this.items).length
    }
    //获取集合中元素的值
    Set.prototype.getValue = function () {
        return Object.values(this.items);
    }
}

let set = new Set();
set.add('aaa');
set.add('bbb');
console.log(set);//Set { items: { aaa: 'aaa', bbb: 'bbb' } }
console.log(set.has('aaa'));//true
console.log(set.size());//2
console.log(set.getValue());//[ 'aaa', 'bbb' ]

集合并集

将两个集合中,不重复的元素添加到一个新的集合中

//封装set
function Set(){
    this.items = {}

    //查找
    Set.prototype.has = function(value){
        return this.items.hasOwnProperty(value);
    }
    //添加
    Set.prototype.add= function(value){
        if(this.has(value)) return false;

        this.items[value] =value;
    }
    //删除
    Set.prototype.del = function (value) {
        if(!this.has(value)) return false;
        delete this.items[value];

    }
    //清空集合
    Set.prototype.clear = function(){
        this.items ={}
    }
    //集合长度
    Set.prototype.size = function () {
        return Object.keys(this.items).length
    }
    //获取集合中元素的值
    Set.prototype.getValue = function () {
        return Object.values(this.items);
    }

    /*
    并集:将两个集合中的元素添加到一个新集合中
     */
    Set.prototype.unionSet = function (setB) {
        let newSet = new Set();
        let values = this.getValue();//获取集合A中所有属性值
        for(let i=0;i<values.length;i++){
            newSet.add(values[i]);
        }
        values = setB.getValue();//获取集合B中value
        for(let i=0;i<values.length;i++){
            newSet.add(values[i]);
        }
        return newSet;
    }
}

let set = new Set();
set.add('aaa');
set.add('bbb');
set.add('ccc');
let setB = new  Set();
setB.add('aaa');
setB.add('ddd');
setB.add('eee');
console.log(set.unionSet(setB));
/*
Set {
  items:
   { aaa: 'aaa', bbb: 'bbb', ccc: 'ccc', ddd: 'ddd', eee: 'eee' } }
 */

集合交集

//封装set
function Set(){
    this.items = {}

    //查找
    Set.prototype.has = function(value){
        return this.items.hasOwnProperty(value);
    }
    //添加
    Set.prototype.add= function(value){
        if(this.has(value)) return false;

        this.items[value] =value;
    }
    //删除
    Set.prototype.del = function (value) {
        if(!this.has(value)) return false;
        delete this.items[value];

    }
    //清空集合
    Set.prototype.clear = function(){
        this.items ={}
    }
    //集合长度
    Set.prototype.size = function () {
        return Object.keys(this.items).length
    }
    //获取集合中元素的值
    Set.prototype.getValue = function () {
        return Object.values(this.items);
    }

    /*
    交集:将两个集合中共同的元素添加到新的集合中
     */
    Set.prototype.intersection = function (setB) {
        let newSet = new Set();
        let values = this.getValue();
        for(let i = 0 ; i<values.length;i++){
            if(setB.has(values[i])){
                newSet.add(values[i])
            }
        }
        return newSet;
    }
}

let set = new Set();
set.add('aaa');
set.add('bbb');
set.add('ccc');
let setB = new  Set();
setB.add('aaa');
setB.add('ddd');
setB.add('eee');
console.log(set.intersection(setB));//Set { items: { aaa: 'aaa' } }

集合差集

//封装set
function Set(){
    this.items = {}

    //查找
    Set.prototype.has = function(value){
        return this.items.hasOwnProperty(value);
    }
    //添加
    Set.prototype.add= function(value){
        if(this.has(value)) return false;

        this.items[value] =value;
    }
    //删除
    Set.prototype.del = function (value) {
        if(!this.has(value)) return false;
        delete this.items[value];

    }
    //清空集合
    Set.prototype.clear = function(){
        this.items ={}
    }
    //集合长度
    Set.prototype.size = function () {
        return Object.keys(this.items).length
    }
    //获取集合中元素的值
    Set.prototype.getValue = function () {
        return Object.values(this.items);
    }

    /*
    差集:将只存在集合A而不存在于集合B的元素添加到新的集合中
     */
    Set.prototype.differentSet = function (setB) {
        let newSet = new Set();
        let values = this.getValue();
        for(let i = 0 ; i<values.length;i++){
            if(!setB.has(values[i])){
                newSet.add(values[i])
            }
        }
        return newSet;
    }
}

let set = new Set();
set.add('aaa');
set.add('bbb');
set.add('ccc');
let setB = new  Set();
setB.add('aaa');
setB.add('ddd');
setB.add('eee');
console.log(set.differentSet(setB));//Set { items: { bbb: 'bbb', ccc: 'ccc' } }

集合子集

集合A是集合B的子集

//封装set
function Set(){
    this.items = {}

    //查找
    Set.prototype.has = function(value){
        return this.items.hasOwnProperty(value);
    }
    //添加
    Set.prototype.add= function(value){
        if(this.has(value)) return false;

        this.items[value] =value;
    }
    //删除
    Set.prototype.del = function (value) {
        if(!this.has(value)) return false;
        delete this.items[value];

    }
    //清空集合
    Set.prototype.clear = function(){
        this.items ={}
    }
    //集合长度
    Set.prototype.size = function () {
        return Object.keys(this.items).length
    }
    //获取集合中元素的值
    Set.prototype.getValue = function () {
        return Object.values(this.items);
    }

    /*
    差集:将只存在集合A而不存在于集合B的元素添加到新的集合中
     */
    Set.prototype.subSet = function (setB) {
        let values = this.getValue();
        for(let i = 0 ; i<values.length;i++){
            if(!setB.has(values[i])){
                return false;
            }
        }
        return true;
    }
}

let set = new Set();
set.add('aaa');
let setB = new  Set();
setB.add('aaa');
setB.add('ddd');
setB.add('eee');
console.log(set.subSet(setB));//true

发布了137 篇原创文章 · 获赞 1 · 访问量 8896

猜你喜欢

转载自blog.csdn.net/weixin_42139212/article/details/104573221