集合及集合操作
集合是由一组无序且唯一(即不能重复)的项组成的。这个数据结构使用了与有限集合相同 的数学概念,但应用在计算机科学的数据结构中。
在数学中,集合有并集,交集,差集,补集等基本操作。这里我们会简单学习一下
创建一个集合
创建集合非常简单,只要生命一个Set类及其常用的属性和方法即可。
集合的常用属性及方法有以下几个:
- add(value):向集合添加一个新的项。
- remove(value):从集合移除一个值。
- has(value):如果值在集合中,返回true,否则返回false。
- clear():移除集合中的所有项。
- size():返回集合所包含元素的数量。与数组的length属性类似。
- values():返回一个包含集合中所有值的数组。
具体代码
class Set {
items:Object = {}
add(item){
if (!this.has(item)){
items[value] = value;
return true;
}
return false;
}
remove(item){
if(this.has(item)){
delete this.items[item]
return true
}
return false
}
has(item){
return this.items.hasOwnProperty(item);
}
clear(){
this.items ={};
}
size(){
return Object.keys(this.items).length;
}
values(){
return Object.keys(this.items);
}
}
实现并集、交集、差集、子集。
并集 的数学概念,集合A和B的并集,表示为A∪B,定义如下:A∪B = { x | x ∈ A∨x ∈ B }。下面是如何实现并集操作。
union(otherSet){
let unionSet = new Set();
let values =this.values();
for(let i=0;i<values.length;i++){
unionSet.add(values[i])
}
let otherValues = otherSet.values();
for(let i=0;i<otherValues.length;i++){
unionSet.add(otherValues[i])
}
return unionSet;
}
交集的数学概念,集合A和B的交集,表示为A∩B,定义如下:
A∩B = { x | x ∈ A∧x ∈ B }。下面是代码实现:
intersection (otherSet){
let intersection = new Set();
let values = this.values();
for(let i=0;i<values.length;i++){
if(otherSet.had(values[i])){
intersction.add(values[i])
}
}
return intersection;
}
差集的数学概念,集合A和B的差集,表示为AB,定义如下:
A-B = { x | x ∈ A 且 x 不属于B }。下面是代码实现:
diff(otherSet){
let diffs = new Set();
let values = this.values();
for(let i=0;i<values.length;i++){
if(!otherSet.had(values[i])){
diffs.add(values[i])
}
}
return diffs;
}
最后一个集合操作是子集。子集的数学概念,集合A是B的子集(或集合B包含 了A),表示为A⊆B,定义如下: ∀x { x ∈ A → x ∈ B }。代码实现如下:
subSet(otherSet){
if (this.size() > otherSet.size()){
return false;
}else{
let values = this.values();
for(let i=0;i<values.length;i++){
if(!otherSet.had(values[i])){
return false;
}
}
return true;
}
}
总结
学习了如何去实现一个集合类,以及如何实现集合类常用的属性和方法。熟悉了集合四种操作。
最后
- 动一动您的小手,
「点个赞吧」 - 都看到这里了,不妨
「加个关注」