-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
集合
集合集合是一种包含不同元素数据结构,在很多编程语言中并不把集合当成一种数据类型,当你想要创建一个数据结构,用来保存一段独一无二的文字的时候集合就非常有用。
集合的特点
- 集合的成员是无序的
- 集合中不允许相同成员存在。
集合关键概念定义
- 集合是一组无序但彼此之间又有一定相关性的成员构成的,集合中的元素称为成员。
- 不包含任何成员的集合称为空集,全集则是包含一切可能成员的集合。
- 如果两个集合的成员相同,则称两个集合相等
- 如果一个集合中的所有成员都属于另外一个集合,则前一集合称为后一集合的子集。
- 并集:将两个集合中的成员进行合并,得到一个新的集合
- 交集:两个集合中共同存在的成员组成一个新的集合
- 补集:属于一个集合不属于另外一个集合的成员组成的集合。
代码实现
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;
}
}