zoukankan      html  css  js  c++  java
  • 集合--数据结构与算法JavaScript描述(9)

    集合 Set


    概念 (跟高中时数学课上学的集合几乎一模一样哦哈哈)

    集合是一种包含不同元素的数据结构。

    集合中的元素称为成员。

    集合的两个最重要的特性:

    1. 集合中的成员是无序的。
    2. 集合中不允许相同成员存在。

    空集:不包含任何成员的集合。

    全集:包含一切可能成员的集合。

    如果两个集合的成员完全相同,则称两个集合相等。

    如果一个集合中所有的成员都属于另外一个集合,则前一集合称为后一集合的子集。

    对集合的操作:

    • 并集:将两个集合中的成员进行合并,得到一个新集合。
    • 交集:两个集合中共同存在的成员组成一个新的集合。
    • 补集:属于一个集合而不属于另一个集合的成员组成的集合。

    Set类的实现

    构造函数的定义
    function Set( ){
        this.dataStore = [];
        this.add = add;
        this.remove = remove;
        this.size = size;
        this.union = union;
        this.intersect = intersect;
        this.subset = subset;
        this.difference = difference;
        this.show = show;
    }
    
    add 向集合中添加一个元素
    function add(data){
        if( this.dataStore.indexOf(data) < 0 ){
            this.dataStore.push(data);
            return true;
        }else {
            return false;
        }
    }
    
    remove 从集合中移除一个元素
    function remove(data){
        var pos = this.dataStore.indexOf(data);
        if(pos > -1){
            this.dataStore.splice(pos, 1);
            return true;
        }else {
            return false;
        }
    }
    
    show 显示集合中的成员
    function show() {
        return this.dataStore;
    }
    
    contains 检查一个成员是否属于该集合
    function contains(data){
        return this.dataStore.indexOf(data) > -1;
    }
    
    union 求并集
    function union(set){
        var temp = new Set();
        for(var i = 0; i < this.dataStore.length; i ++){
            temp.add(this.dataStore[i]);
        }
        for(var i = 0; i < set.dataStore.length; i ++){
            if(!temp.contains(set.dataStore[i])){
                temp.add(set.dataStore[i]);
            }
        }
        return temp;
    }
    
    intersect [,intə'sekt] 求交集
    function intersect(set){
        var temp = new Set();
        for(var i = 0; i < this.dataStore.length; i ++){
            set.contains(this.dataStore[i]) && temp.add(this.dataStore[i]);
        }
        return temp;
    }
    
    size 获取该集合的大小
    function size(){
        return this.dataStore.length;
    }
    
    subset 判断该集合是否是参数集合的子集
    function subset(set){
        if(this.size() > set.size()){
            return false; 
        }else {
    
        }
    }
    
    difference 求补集 a.difference(b)得到的是属于a但不属于b的成员组成的集合
    function difference(set){
        var temp = new Set();
        for(var i = 0; i < this.dataStore.length; i ++){
            !set.contains(this.dataStore[i]) && temp.add(this.dataStore[i]);
        }
        return temp;
    }
    

    PS:
    总体来说,集合这章的内容还是挺容易理解的,但是目前来说,我还是不知道实际项目中什么场景下要用到集合来存储数据,待以后慢慢悟吧

  • 相关阅读:
    直击 KubeCon 2019 现场,阿里云 Hands-on Workshop 亮点回顾
    分享 KubeCon 2019 (上海)关于 Serverless 及 Knative 相关演讲会议
    MaxCompute 费用暴涨之新增SQL分区裁剪失败
    UI2CODE复杂背景无法识别?闲鱼工程师这样打造高准确率方案
    阿里云发布边缘容器,云边端一体化时代来临
    中间件性能挑战赛上线了两大黑科技,是高手就盘它!!
    MaxCompute 费用暴涨之存储压缩率降低导致SQL输入量变大
    通知: Spring Cloud Alibaba 仓库迁移
    MaxCompute 项目子账号做权限管理
    性能压测工具选型对比
  • 原文地址:https://www.cnblogs.com/clover77/p/9226017.html
Copyright © 2011-2022 走看看