数据结构-集合

前言

集合是一种基本的数据结构,主要特点就是元素无序,不重复。

实现思路

利用对象属性不重复的特性,创建一个同值的键值对(例如:{y: ‘y’})的对象,获取所有属性即可得到集合。在此基础上,实现集合的交集、并集、差集。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
var Set = function(){
let items = {};
// 是否有元素
this.has = function(value){
// hasOwnProperty: 本身的属性,不包括原型的属性
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(){
// keys: es6 里的方法
return Object.keys(items).length;
}

// 集合数值
this.value = function(){
let values = [];
for(let i in items){
if(items.hasOwnProperty(i)){
values.push(i);
}
}
return values;
}

// 并集
this.union = function(otherSet){
// 此处add方法就已经去除重复的元素了
let resultSet = new Set();
var arr = this.value();
for(let i = 0; i< arr.length; i++){
resultSet.add(arr[i]);
}
arr = otherSet.value();
for(let i = 0; i< arr.length; i++){
resultSet.add(arr[i]);
}
return resultSet;
}

// 交集
this.intersection = function(otherSet){
let resultSet = new Set();
let arr = this.value();
for(let i = 0; i < arr.length; i++){
if(otherSet.has(arr[i])){
resultSet.add(arr[i])
}
}
return resultSet;
}

// 差集
this.difference = function(otherSet){
let resultSet = new Set();
let arr = this.value();
for(let i; i< arr.length; i++){
if(!otherSet.has(arr[i])){
resultSet.add(arr[i])
}
}
return resultSet;
}

}
坚持原创技术分享,您的支持将鼓励我继续创作!