您的位置:首页 > 理论基础 > 数据结构算法

数据结构 - 集合

BradyCC 2019-06-15 09:48 101 查看 https://blog.csdn.net/bradycc/

集合

数据结构 - 集合,不重复。

// 集合实现
// ES5
var MySet = function() {
var items = {};

// 检查元素是否存在
this.has = function(value) {
return items.hasOwnProperty(value);
};

// 添加元素
this.add = function(value) {
// 集合不重复 - 先检查元素是否存在
if (!this.has(value)) {
items[value] = value;
return value;
}
return false;
};

// 删除元素
this.remove = function(value) {
// 集合不重复 - 先检查元素是否存在
if (this.has(value)) {
delete items[value];
return true;
}
return false;
};

// 清除集合
this.clear = function() {
items = {};
};

// 获取集合长度
this.size = function() {
// var count = 0;
// for (var i in items) {
//   if (items.hasOwnProperty(i)) {
//     count++;
//   }
// }
// return count;
return Object.keys(items).length;
};

// 获取集合元素
this.value = function() {
var values = [];
for (var i in items) {
if (items.hasOwnProperty(i)) {
values.push(items[i]);
}
}
return values;
};

// 并集
this.union = function(oSet) {
var sSet = new MySet();

// 获取自己的值
var arr = this.value();
for (var i in arr) {
sSet.add(arr[i]);
}
// 操作另一个集合
var oarr = oSet.value();
for (var i in oarr) {
sSet.add(oarr[i]);
}

return sSet;
};

// 交集
this.intersection = function(oSet) {
var sSet = new MySet();

// 获取自己的值
var arr = this.value();
for (var i in arr) {
if (oSet.has(arr[i])) {
sSet.add(arr[i]);
}
}

return sSet;
};

// 差集
this.difference = function(oSet) {
var sSet = new MySet();

// 获取自己的值
var arr = this.value();
for (var i in arr) {
if (!oSet.has(arr[i])) {
sSet.add(arr[i]);
}
}

return sSet;
};

// 检查items
this.getItem = function() {
return items;
};
};

var A = new MySet();
A.add(1);
A.add(2);
A.add(3);
var B = new MySet();
B.add(2);
B.add(3);
B.add(4);

ES6 - set集合。

// ES6 set
var s = new Set();
s.add(1);
s.add(2);
s.add(3);

// 遍历
// s.forEach(function(value, value2, set) {
//   console.log(value);
//   console.log(value2);
//   console.log(set);
// });

// 迭代器
var interator = s.entries();
interator.next();
interator.next();
interator.next();
interator.next();

// WeakSet
// var w = new WeakSet();
// var obj = {'name': 'Brady'};
// w.add(obj);
// console.log(w);

var A = new Set();
A.add(1);
A.add(2);
A.add(3);
var B = new Set();
B.add(2);
B.add(3);
B.add(4);

// 并集
console.log(new Set([...A, ...B]));
// 交集
console.log(new Set([...A].filter(item => B.has(item))));
// 差集
console.log(new Set([...A].filter(item => !B.has(item))));
标签: