集合
集合是一种无序且唯一的数据结构。
ES6 中有集合数据结构 - Set。
# 集合的实现
Collection 类的实现基于数组,数组用来存储数据。(使用 Set 可以直接使用对应方法)
# 抽象数据类型定义
- ADT 集合
- Data
- 无逻辑关联的元素集合
- Operation
- add(): 添加元素
- remove(): 移除元素
- size(): 当前元素个数
- union():并集,将两个集合中的成员进行合并,得到一个新集合
- intersect(): 交集,将两个集合中的成员进行合并,得到一个新集合。
- difference(): 补集,属于一个集合而不属于另一个集合的成员组成的集合。
- subset(): 传入集合是否当前集合的子集
- show(): 显示集合中的成员
- Data
- endADT
function Collection() {
this.dataStore = [];
this.add = add;
this.remove = remove;
this.size = size;
this.union = union;
this.intersect = intersect;
this.difference = difference;
this.subset = subset;
this.show = show;
this.contains = contains;
}
function add(data) {
if (this.dataStore.indexOf(data) < 0) {
this.dataStore.push(data);
return true;
} else {
return false;
}
}
function remove(data) {
var pos = this.dataStore.indexOf(data);
if (pos > -1) {
this.dataStore.splice(pos,1);
return true;
} else {
return false;
}
}
function show() {
return this.dataStore;
}
function contains(data) {
if (this.dataStore.indexOf(data) > -1) {
return true;
} else {
return false;
}
}
function union(set) {
var tempSet = new Collection();
for (var i = 0; i < this.dataStore.length; ++i) {
tempSet.add(this.dataStore[i]);
}
for (var i = 0; i < set.dataStore.length; ++i) {
if (!tempSet.contains(set.dataStore[i])) {
tempSet.dataStore.push(set.dataStore[i]);
}
}
return tempSet;
}
function intersect(set) {
var tempSet = new Collection();
for (var i = 0; i < this.dataStore.length; ++i) {
if (set.contains(this.dataStore[i])) {
tempSet.add(this.dataStore[i]);
}
}
return tempSet;
}
function subset(set) {
if (this.size() > set.size()) {
return false;
} else {
for (var member in this.dataStore) {
if (!set.contains(member)) {
return false;
}
}
}
return true;
}
function size() {
return this.dataStore.length;
}
function difference(set) {
var tempSet = new Collection();
for (var i = 0; i < this.dataStore.length; ++i) {
if (!set.contains(this.dataStore[i])) {
tempSet.add(this.dataStore[i]);
}
}
return tempSet;
}
var s1 = new Collection();
s1.add("A")
s1.add("B")
s1.add("C")
s1.add("D")
var s2 = new Collection();
s2.add("A")
s2.add("B")
s2.add("E")
s2.add("F")
s1.union(s2).dataStore; // [A, B, C, D, E, F]
s1.intersect(s2).dataStore; // [A, B]
s1.difference(s2).dataStore; // [C, D]
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
89
90
91
92
93
94
95
96
97
98
99
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
89
90
91
92
93
94
95
96
97
98
99
# 集合的应用
集合的基本操作有:并集、交集、补集。
- 去重,判断元素是否在集合中,求交集
- 两个数组的交集
- Set 的操作