5月阅读周·数据结构与算法JavaScript描述 | 集合,一种包含不同元素的数据结构

举报
叶一一 发表于 2024/05/28 09:32:28 2024/05/28
【摘要】 背景去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。没有计划的阅读,收效甚微。新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。这个“玩法”虽然常见且板正,但是有效,已经坚持阅读三个月。4月份的阅读计划有两本,《你不知道的JavaScrip》系列迎来收尾。已读完书籍:《架构简洁之道》、《深入浅出的Node.js》、《...

背景

去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。

没有计划的阅读,收效甚微。

新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出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畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏️ | 留言📝

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。