集合(Set)是一种包含不同元素的数据结构。集合中的元素称为成员。集合的两个最重要的特性是:首先,集合中的成员是无序的;其次,集合中不允许相同成员存在。当你想要创建一个数据结构,用来保存一些独一无二的元素时,比如一段文本中用到的单词,集合就变的非常有用。
集合的定义:
(1)不包含任何成员的集合称为空集,全集则是包含一切可能成员的集合。
(2)如果两个集合的成员完全相同,则称两个集合相等。
(3)如果一个集合中所有的成员都属于另外一个集合,则前一集合称为后一集合的子集。
对集合的操作:
(1)并集
将两个集合中的成员进行合并,得到一个新集合。
(2)交集
两个集合中共同存在的成员组成一个新的集合。
(3)补集
属于一个集合而不属于另一个集合的成员组成的集合。
Set类定义:
<span style="white-space:pre"> </span>function Set() {
this.dataSource = [];
this.add = add;
this.remove = remove;
this.size = size;
//并集
this.union = union;
//交集
this.intersect = intersect;
//子集
this.subset = subset;
//this.difference = difference;
this.show = show;
this.contains = contains;
}
function add(elem) {
if(this.dataSource.indexOf(elem)>-1) {
return false;
}else {
this.dataSource.push(elem);
return true;
}
}
function remove(data) {
var pos = this.dataSource.indexOf(data);
if(pos>-1) {
this.dataSource.splice(pos, 1);
return true;
}else {
return false;
}
}
function size() {
return this.dataSource.length;
}
function show() {
var i=0,
len = this.dataSource.length;
while(i < len) {
console.log(this.dataSource[i]);
i++;
}
}
function contains(data) {
if(this.dataSource.indexOf(data) > -1){
return true;
}else {
return false;
}
}
function union(set) {
var temp = new Set(),
i = 0,len = 0;
for(i=0,len = this.dataSource.length;i<len; i++) {
temp.add(this.dataSource[i]);
}
for(i=0,len = set.dataSource.length;i<len;i++) {
if(!temp.contains(set.dataSource[i])) {
temp.dataSource.push(set.dataSource[i]);
}
}
return temp;
}
function intersect(set) {
var i = 0,len = set.dataSource.length,
tempSet = new Set();
while(i < len) {
if(this.contains(set.dataSource[i])) {
tempSet.add(set.dataSource[i]);
}
i++;
}
return tempSet;
}
function subset(set) {
if(this.size() > set.size()) {
return false;
}
var i,len;
for(i = 0,len = this.size();i<len;i++) {
if(!set.contains(this.dataSource[i])) {
return false;
}
}
return true;
}
function difference(set) {
var temSet = new Set(),
i,len;
for(i=0,len = this.size();i<len;i++) {
if(!set.contains(this.dataSource[i])) {
tempSet.add(this.dataSource[i]);
}
}
return tempSet;
}
var cis = new Set();
cis.add("Mike");
cis.add("Clayton");
cis.add("Jennifer");
cis.add("Raymond");
var dmp = new Set();
dmp.add("Raymond");
dmp.add("Cynthia");
dmp.add("Jonathan");
var it = new Set();
it = cis.intersect(dmp);
//it.show();
console.log(cis.subset(dmp));