Skip to content

集合 #16

@hubvue

Description

@hubvue

集合

集合集合是一种包含不同元素数据结构,在很多编程语言中并不把集合当成一种数据类型,当你想要创建一个数据结构,用来保存一段独一无二的文字的时候集合就非常有用。

集合的特点

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

集合关键概念定义

  1. 集合是一组无序但彼此之间又有一定相关性的成员构成的,集合中的元素称为成员。
  2. 不包含任何成员的集合称为空集,全集则是包含一切可能成员的集合。
  3. 如果两个集合的成员相同,则称两个集合相等
  4. 如果一个集合中的所有成员都属于另外一个集合,则前一集合称为后一集合的子集。
  5. 并集:将两个集合中的成员进行合并,得到一个新的集合
  6. 交集:两个集合中共同存在的成员组成一个新的集合
  7. 补集:属于一个集合不属于另外一个集合的成员组成的集合。

代码实现

class Set {
        constructor(){
            this.dataStore = [];
        }
        //向集合中加入一个成员
        add(data) {
            if(!this.dataStore.includes(data)){
                this.dataStore.push(data);
                return data;
            }
            return false;
        }
        //从集合中移除一个成员
        remove(data){
            let idx = this.dataStore.indexOf(data);
            let value = this.dataStore[idx];
            if(idx !== -1){
                this.dataStore.splice(idx,1);
                return value;
            }
            return false;
        }
        //显示集合中的所有成员
        show(){
            return this.dataStore.toString();
        }
        //并集
        union(set){
            const tempSet = new Set();
            for(let i = 0, len = this.dataStore.length; i < len; i ++) {
                tempSet.add(this.dataStore[i]);
            }
            for(let i = 0, len = set.dataStore.length; i < len; i ++) {
                if(!tempSet.dataStore.includes(set.dataStore[i])){
                    tempSet.add(set.dataStore[i]);
                }
            }
            return tempSet;
        }
        //交集
        intersect(set){
            const tempSet = new Set();
            for(let i = 0, len = this.dataStore.length; i < len; i ++) {
                if(set.dataStore.includes(this.dataStore[i])){
                    tempSet.add(this.dataStore[i]);
                }
            }
            return tempSet;
        }
        //补集
        difference(set){
            const tempSet = new Set();
            for(let i = 0, len = this.dataStore.length; i < len; i ++) {
                if(!set.dataStore.includes(this.dataStore[i])){
                    tempSet.add(this.dataStore[i]);
                }
            }
            return tempSet;
        }
        //子集
        subset(set){
            if(set.size() > this.size()){
                return false;
            } else {
                for(let i = 0, len = set.size(); i < len; i ++){
                    if(!this.dataStore.includes(set.dataStore[i])){
                        return false;
                    }
                }
                return true;
            }
        }
        //返回集合的长度
        size(){
            return this.dataStore.length;
        }
        
    }

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions