js版数据结构_05集合(2)
本篇博客知识点:
- 实现集合的基本运算
写在前面:
集合在数学中是一个很重要的概念当然在计算机领域中也是非常重要
数据库就是它的一个典型应用
如:写一条sql的查询语句便可以指定获取的全部数据集合还是它的子集,也可以获取两张表上的共有数据(交集)等等
接下来要实现的运算
- 并集
- 交集
- 差集
- 子集
正题:基本运算的实现
1. 并集 A∪ B
定义:A∪ B = {x | x ∈ A ∪ ∈ B}
实现:
// 并集
function union(set01, set02) {
let unionSet = new Set(); //用来装并集集合
set01.value().forEach((val) => {
unionSet.add(val);
})
set02.value().forEach((val) => {
unionSet.add(val);
})
return unionSet;
}
2. 交集 A∩B
定义:A∩B = {x | x ∈ A ∩ x ∈ B}
实现:
// 交集
function intersection(set01, set02) {
let intersectionSet = new Set();
let set01Values = set01.value();
for (let i = 0; i < set01Values.length; i++) {
if (set02.has(set01Values[i])) {
intersectionSet.add(set01Values[i])
}
}
return intersectionSet;
}
3. 差集 A - B
定义:A - B = {x | x ∈ A ∩ x ∉ B }
实现:
// 差集
function difference(set01, set02) {
let differenceSet = new Set();
set01.value().forEach((val) => {
if (!set02.has(val)) {
differenceSet.add(val);
}
})
return differenceSet;
}
4. 判断子集 A ⊆ B
定义:{x | ∀x ∈ A => x ∈ B}
实现:
// 判断是否是某个集合的子集
function isSubsetOf(set01, set02) {
if (set01.size() > set02.size()) {
return false;
}
// 迭代
let flag = set01.value().every((val) => {
if (!set02.has(val)) {
return false;
}
return true;
});
if (flag === false) {
return false;
} else {
return true;
}
}
5. 部分测试代码
let set03 = new Set();
set03.add(1);
console.log(union(set01, set02));
console.log(intersection(set01, set02));
console.log(difference(set01, set02));
console.log(isSubsetOf(set01, set02));
console.log(isSubsetOf(set03, set02));
结果图: