参考
集合(Set)
- 无序的、不重复的
- 不能通过下标值访问,元素唯一
- 集合的并、交、差、子集操作中,要注意引用值的赋值是浅复制,指向同一个地址空间
functio Set(){
this.items = {};
Set.prototype.add = function(value){
if(this.has(value))
return false;
this.items[value + ''] = value;
return true;
}
Set.prototype.remove = function(value){
if(!this.has(value))
return false;
delete this.items[value + ''];
return true;
}
Set.prototype.has = function(value){
return this.items.hasOwnProperty(value);
}
Set.prototype.clear = function(){
this.items = {};
}
Set.prototype.size = function(){
return Object.keys(this.items).length;
}
Set.prototype.values = function(){
return Object.keys(this.items);
}
Set.prototype.union = function(otherSet){
var newSet = new Set();
var values = this.values();
for(var i = 0; i < values.length; i ++){
newSet.add(values[i]);
}
values = otherSet.values();
for(var i = 0; i < values.length; i ++){
newSet.add(values[i]);
}
return newSet;
}
Set.prototype.intersection = function(otherSet){
var newSet = new Set();
var values = this.values();
for(var i = 0; i < values.length; i ++){
if(otherSet.has(values[i])){
newSet.add(values[i]);
}
}
return newSet;
}
Set.prototype.difference = function(otherSet){
var newSet = new Set();
var values = this.values();
for(var i = 0; i < values.length; i ++){
if(!otherSet.has(values[i])){
newSet.add(values[i]);
}
}
return newSet;
}
Set.prototype.subset = fucntion(otherSet){
var values = this.values();
for(var i = 0; i < values.length; i ++){
if(!otherSet.has(values[i])){
return false;
}
}
return true;
}
}
console.log("A test");
var setA = new Set();
console.log(setA.add("moon"));
console.log(setA.add("difference"));
console.log(setA.add("moon"));
console.log(setA.add("sun"));
console.log(setA.add("hao"));
console.log(setA.size());
console.log(setA.values());
console.log(setA.has("moon"));
console.log(setA.remove("hao"));
console.log(setA.remove("hao"));
console.log("A:",setA.values());
var setB = new Set();
setB.add(1);
setB.add("sun");
setB.add("hao");
setB.add("moon");
console.log("B:",setB.values());
console.log("A U B:",setA.union(setB));
console.log("-----");
console.log("A intersection B:",setA.intersection(setB));
console.log("A-B:",setA.difference(setB));
console.log("B-A:",setB.difference(setA));
var setC = setB;
console.log("C:",setC.values());
console.log("A is B subset:",setA.subset(setB));
console.log("c is B subset:",setC.subset(setB));
