// 集合是一种包含不同元素的数据结构。集合中的成员是无序的,集合不允许相同的成员存在。
function Set(){
this.dataStore = [];
this.add = add;
this.remove = remove;
this.size = size;
// 并集:将两个集合中的成员进行合并,得到一个新集合
this.union = union;
this.contains = contains;
// 交集:两个集合中共同存在的成员组成一个新的集合
this.intersect = intersect;
// 判断一个集合是否是另一个集合的子集
this.subset = subset;
// 补集:属于一个集合而不属于另一个集合的成员组成的集合
this.difference = difference;
this.show = show;
}
function add(data){
if(this.dataStore.indexOf(data) < 0){
this.dataStore.push(data);
return true;
}else{
return false;
}
}
function remove(data){
var pos = this.dataStore.indexOf(data);
if(pos > -1){
this.dataStore.splice(pos, 1);
return true;
}else{
return false;
}
}
function size(){
return this.dataStore.length;
}
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.dataStore.push(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 subset(set){
if(this.size() > set.size()){
return false;
}else{
for(var member in this.dataStore){
if(!set.contains(member)){
return false;
}
}
}
return true;
}
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 show(){
return this.dataStore;
}
// start
var log = console.log;
var names = new Set();
names.add("Late");
names.add("David");
names.add("Mike");
names.add("Raymond");
// add
if(names.add("Mike")){
log("Mike added");
}else{
log("Can't add Mike, must already be in set");
}
log("names: " + names.show());
log("");
// remove
var removed = "Mike";
if(names.remove(removed)){
log(removed + " removed.");
}else{
log(removed + " not removed.");
}
log("names: " + names.show());
// union
var dmp = new Set();
dmp.add("Raymond");
dmp.add("Cynthia");
dmp.add("Jonathan");
log("dmp: " + dmp.show());
var uni = new Set();
uni = names.union(dmp);
log("并集(names and dmp): " + uni.show());
log("");
// intersect
var inter = names.intersect(dmp);
log("交集(names and dmp): " + inter.show());
log("");
// subset
if(names.subset(dmp)){
log("names集合是dmp集合的一个子集。");
}else{
log("names集合不是dmp集合的一个子集。");
}
log("");
// intersect
var diff = names.difference(dmp);
log("补集(names and dmp): " + diff.show());
13、集合
最新推荐文章于 2022-04-24 15:35:52 发布