Javascript之數據結構與算法的Set實現

Javascript之數據結構與算法的Set實現

1.ES6中的Set

請參考官網API:http://caibaojian.com/es6/set-map.html

2.自實現Set

class Set{
    constructor(){
        this.items={};
    }
    has(key){
        return key in this.items;
    }
    _has(key){
        return this.items.hasOwnProperty(key);
    }
    add(key){
        if(!this.has(key)){
            this.items[key]=key;
            return true;
        }
        return false;
    }
    remove(key){
        if(this.has(key)){
            delete this.items[key];
            return true;
        }
        return false;
    }
    clear(){
        this.items={};
    }
    size(){
        return Object.keys(this.items).length;
    }
    values(){
        let values=[];
        for(let key in this.items){
            if(this.items.hasOwnProperty(key)){
                values.push(this.items[key])
            }
        }
        return values;
    }
    union(otherSet){
        let unionSet=new Set();
        let values=this.values();
        for(let i=0;i<values.length;i++){
            unionSet.add(values[i]);
        }
        values=otherSet.values();
        for(let i=0;i<values.length;i++){
            unionSet.add(values[i]);
        }
        return unionSet;
    }
    intersection(otherSet){
        let intersectionSet=new Set();
        let values=this.values();
        for(let i=0;i<values.length;i++){
            if(otherSet.has(values[i])){
                intersectionSet.add(values[i]);
            }
        }
        return intersectionSet
    }
    difference(otherSet){
        let differenceSet=new Set();
        let values=this.values();
        for(let i=0;i<values.length;i++){
            if(!otherSet.has(values[i])){
                differenceSet.add(values[i]);
            }
        }
        return differenceSet;
    }
    isSubset(otherSet){
        if(this.size()>otherSet.size()){
            return false;
        }else{
            let values=this.values();
            for(let i=0;i<values.length;i++){
                if(!otherSet.has(values[i])){
                    return false;
                }
            }
            return true;
        }
    }
}

let set = new Set();
// set.add(1);
// console.log(set.values());
// console.log(set.has(1));
// console.log(set.size());
// set.add(2);
// console.log(set.values());
// console.log(set.has(2));
// console.log(set.size());
// set.remove(1);
// console.log(set.values());
//-------------------------------並集---------------------
// set.add(1);
// set.add(2);
// set.add(3);
// let setA=new Set();
// setA.add(2);
// setA.add(3);
// setA.add(4);
// let unionAB=setA.union(set);
// console.log(unionAB.values());
//-------------------------------交集---------------------
// set.add(1);
// set.add(2);
// set.add(3);
// let setA=new Set();
// setA.add(2);
// setA.add(3);
// setA.add(4);
// let intersectionAB=setA.intersection(set);
// console.log(intersectionAB.values());
//-----------------------------差集------------------------
// set.add(1);
// set.add(2);
// set.add(3);
// let setA=new Set();
// setA.add(2);
// setA.add(3);
// setA.add(4);
// let differenceAB=setA.difference(set);
// console.log(differenceAB.values());
//---------------------------子集------------------------------
// set.add(1);
// set.add(2);
// set.add(3);
// let setA=new Set();
// setA.add(2);
// setA.add(3);
// let isSubsetAB=setA.isSubset(set);
// console.log(isSubsetAB);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章