13、集合

// 集合是一种包含不同元素的数据结构。集合中的成员是无序的,集合不允许相同的成员存在。

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());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值