阅读 6

数据结构-集合

前言

集合是一种基本的数据结构,主要特点就是元素无序,不重复。

实现思路

利用对象属性不重复的特性,创建一个同值的键值对(例如:{y: 'y'})的对象,获取所有属性即可得到集合。在此基础上,实现集合的交集、并集、差集。

代码实现

var Set = function(){
    let items = {};
    // 是否有元素
    this.has = function(value){
        // hasOwnProperty: 本身的属性,不包括原型的属性
        return items.hasOwnProperty(value);
    }

    // 添加
    this.add = function(value){
        if(!this.has(value)){
            items[value] = value;
            return value;
        }
        return false;
    }

    // 移除元素
    this.remove = function(value){
        if(this.has(value)){
            delete items[value];
            return true;
        }
        return false;
    }

    // 清空
    this.clear = function(){
        items = {};
    }

    // 集合大小
    this.size = function(){
       // keys: es6 里的方法 
       return Object.keys(items).length;
    }
    
    // 集合数值
    this.value = function(){
        let values = [];
        for(let i in items){
            if(items.hasOwnProperty(i)){
                values.push(i);
            }
        }
        return values;
    }

    // 并集
    this.union = function(otherSet){
        // 此处add方法就已经去除重复的元素了
        let resultSet = new Set();
        var arr = this.value();
        for(let i = 0; i< arr.length; i++){
            resultSet.add(arr[i]);
        }
        arr = otherSet.value();
        for(let i = 0; i< arr.length; i++){
            resultSet.add(arr[i]);
        }
        return resultSet;
    }

    // 交集
    this.intersection = function(otherSet){
        let resultSet = new Set();
        let arr = this.value();
        for(let i = 0; i < arr.length; i++){
            if(otherSet.has(arr[i])){
                resultSet.add(arr[i])
            }
        }
        return resultSet;
    }

    // 差集
    this.difference = function(otherSet){
        let resultSet = new Set();
        let arr = this.value();
        for(let i; i< arr.length; i++){
            if(!otherSet.has(arr[i])){
                resultSet.add(arr[i])
            }
        }
        return resultSet;
    }

}
复制代码
关注下面的标签,发现更多相似文章
评论