集合是由一组无序且唯一(即不能重复)的项组成的。这个数据结构使用了与有限集合相同 的数学概念,但应用在计算机科学的数据结构中。
- 结合是一种包含不同元素数据结构
- 在很多编程语言中并不把集合当成一种数据类型,当你想要创建一个数据结构,用来保存一段独一无二的文字的时候集合就非常有用
- 集合的成员是无序的
- 集合中不允许相同成员存在
function Set(){
this.dataStore = [];
this.add = add;
this.remove = remove;
this.show = show;
this.union = union;//并集
this.intersect = intersect;//交集
this.difference = difference;//补集
this.contains = contains;
this.size = size;
this.subset = subset;
}
function add(data){
if(this.dataStore.indexOf(data) < 0){
this.dataStore.push(data);
}else{
return false;
}
}
function remove(data){
var pos = this.dataStore.indexOf(data);
if(pos > -1){
this.dataStore.splice(pos, 1);
}else{
return false;
}
}
function show(){
return this.dataStore;
}
function union(set){//全集
var tempSet = new Set();
for(var i=0;i<this.dataStore.length;i++){
tempSet.add(this.dataStore[i]);
}
for(var i=0;i<set.dataStore.length;i++){
if(!tempSet.contains(set.dataStore[i])){
tempSet.add(set.dataStore[i]);
}
}
return tempSet
}
function contains(data){
if(this.dataStore.indexOf(data)>-1) return true;
else return false;
}
function intersect(set){//交集
var tempSet = new Set();
for(var i=0;i<this.dataStore.length;i++){
if(set.contains(this.dataStore[i])){
tempSet.add(this.dataStore[i]);
}
}
return tempSet;
}
function difference(set){//补集
var tempSet = new Set();
for(var i=0;i<this.dataStore.length;i++){
if(!set.contains(this.dataStore[i])){
tempSet.add(this.dataStore[i]);
}
}
return tempSet;
}
function size(){
return this.dataStore.length;
}
function subset(set){
if(set.size()>this.size()){
return false;
}else{
for(var i=0;i<set.dataStore.length;i++){
if(!this.contains(set.dataStore[i])){
return false;
}
}
return true;
}
}
var names = new Set();
names.add("小红");
names.add("小丽");
names.add("小张");
names.add("Tom");
names.add("Jack");
//console.log(names.show());
var cis = new Set();
cis.add('小张');
cis.add('Jack');
cis.add('Tom');
var it = new Set();
it = names.union(cis);
console.log("并集+++++++"+it.show());
it = names.intersect(cis);
console.log("交集+++++++"+it.show());
it = names.difference(cis);
console.log("补集+++++++"+it.show());
console.log(names.subset(cis));