5月阅读周·数据结构与算法JavaScript描述 | 集合,一种包含不同元素的数据结构
背景
去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。
没有计划的阅读,收效甚微。
新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。
这个“玩法”虽然常见且板正,但是有效,已经坚持阅读四个月。
已读完书籍:《架构简洁之道》、《深入浅出的Node.js》、《你不知道的JavaScript(上卷)》、《你不知道的JavaScript(中卷)》、《你不知道的JavaScript(下卷)》。
当前阅读周书籍:《数据结构与算法JavaScript描述》。
集合
集合的定义、操作和属性
集合的定义
下面是一些使用集合时必须了解的定义。
- 不包含任何成员的集合称为空集,全集则是包含一切可能成员的集合。
- 如果两个集合的成员完全相同,则称两个集合相等。
- 如果一个集合中所有的成员都属于另外一个集合,则前一集合称为后一集合的子集。
对集合的操作
对集合的基本操作有下面几种。
- 并集
将两个集合中的成员进行合并,得到一个新集合。
- 交集
两个集合中共同存在的成员组成一个新的集合。
- 补集
属于一个集合而不属于另一个集合的成员组成的集合。
Set类的实现
Set类的实现基于数组,数组用来存储数据。我们还为上文提到的对集合的操作定义了相应的方法。下面是构造函数的定义:
function Set() {
this.dataStore = [];
this.add = add;
this.remove = remove;
this.size = size;
this.union = union;
this.intersect = intersect;
this.subset = subset;
this.difference = difference;
this.show = show;
}
add()方法的定义:
function add(data) {
if (this.dataStore.indexOf(data) < 0) {
this.dataStore.push(data);
return true;
} else {
return false;
}
}
因为集合中不能包含相同的元素,所以,使用add()方法将数据存储到数组前,先要确保数组中不存在该数据。我们使用indexOf()检查新加入的元素在数组中是否存在。如果找到,该方法返回该元素在数组中的位置;如果没有找到,该方法返回-1。如果数组中还未包含该元素,add()方法会将新加元素保存到数组中并返回true;否则,返回false。将add()方法的返回值定义为布尔类型,可以明确告诉我们是否将一个元素成功加入到了集合中。remove()方法和add()方法的工作原理类似。首先检查待删元素是否在数组中,如果在,则使用数组的splice()方法删除该元素并返回true;否则,返回false,表示集合中并不存在这样一个元素。
下面是remove()方法的定义:
function remove(data) {
var pos = this.dataStore.indexOf(data);
if (pos > -1) {
this.dataStore.splice(pos, 1);
return true;
} else {
return false;
}
}
如何使用截至目前的Set类:
load('set.js');
var names = new Set();
names.add('David');
names.add('Jennifer');
names.add('Cynthia');
names.add('Mike');
names.add('Raymond');
if (names.add('Mike')) {
console.log('Mike added');
} else {
console.log("Can't add Mike, must already be in set");
}
console.log(names.show());
var removed = 'Mike';
if (names.remove(removed)) {
console.log(removed + ' removed.');
} else {
console.log(removed + ' not removed.');
}
names.add('Clayton');
console.log(names.show());
removed = 'Alisa';
if (names.remove('Mike')) {
console.log(removed + ' removed.');
} else {
console.log(removed + ' not removed.');
}
程序输出如下:
Can't add Mike, must already be in set
David, Jennifer, Cynthia, Mike, Raymond
Mike removed.
David, Jennifer, Cynthia, Raymond, Clayton
Alisa not removed.
总结
集合(set)是一种包含不同元素的数据结构。
集合中的元素称为成员。集合的两个最重要特性是:首先,集合中的成员是无序的;其次,集合中不允许相同成员存在。
集合在计算机科学中扮演了非常重要的角色,然而在很多编程语言中,并不把集合当成一种数据类型。当你想要创建一个数据结构,用来保存一些独一无二的元素时,比如一段文本中用到的单词,集合就变得非常有用。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)