第6章:集合

news2024/11/16 23:34:19

集合简介

  1. 一种无序且唯一的数据结构。不关心顺序,集合里面的元素都是唯一的。
    栈,队列,链表他们里面都有可能出现重复的数据,但是集合里面的元素是唯一的。
    栈,队列,链表它们都有自己的顺序,但是集合是无序的。

  2. Es6中新增了集合:名为Set

  3. 集合的常用操作:去重复,判断某元素是否在集合中,求交集(几个集合里面都存在的元素)

  4. 对set数据结构,key和value是一样的。

// 1.去重复
const arr = [1,2,1,2]
const arrNew = [...new Set(arr)]

// new Set(arr): 去重复,把去重复的数据放在一个数组里面[...new Set(arr)]
console.log(arrNew) // [1,2]


// 2.判断某元素是否在集合中(直接使用set的has方法)
const set = new Set(arr)
const has = set.has(1) // true

// 3.求交集(set没有提供直接求交集的方法,那么我们直接把set转换成数组,利用数组的filter方法)
const set1 = {1,2}
const set2 = {2, 3}
const set22 = [...set2]
const set3 = set22.filter(item => set1.has(item))
console.log(set3) // 2

leetCode: 349两个数组的交集

题目:给2个数组,求交集。请添加图片描述

const intersection = function(nums1, nums2) {
	// return [...new Set(num1)].filter(n => new Set(nums2).has(n))
	return [...new Set(num1)].filter(n => nums2.includes(n))
}

时间复杂度:O(n ^ 2)
空间复杂度:O(n)

使用Es6中的Set操作

  1. 使用Set对象:new,add,delete, has, size
  2. 迭代Set:多种迭代方法,Set与Array互转,求交集/差集

add

let mySet = new Set()

// 字符串
mySet.add('1')
mySet.add('5')
mySet.add('5')

// 数字
mySet.add(1)
mySet.add(5)
console.log(mySet) // {"1", "5", 1, 5}

// 对象 添加对象的时候,两次都生效,因为对象看起来是一个东西,但是两个对象在内存中存储的位置不一样,所以从本质上来说是2个不同的对象
mySet.add({a: "1", b: "2"})
mySet.add({a: "1", b: "2"}) // 第二次也能添加成功

console.log(mySet) // {"1", "5", 1, 5, {a: "1", b: "2"}, {a: "1", b: "2"}}

has

let mySet = new Set()

// 字符串
mySet.add('1')

mySet.has('1') // true
mySet.has(1) // false

delete

let mySet = new Set()

// 字符串
mySet.add('1')

mySet.delete('1') // true
console.log(mySet) // {size: 0}
mySet.size // 0

for of

// 方法1遍历:
let mySet = new Set()
mySet.add('4')
mySet.add('0')
mySet.add('6')
for (let item of mySet) {
	console.log(item) // 4   0   6
}


// 方法2遍历:
let mySet = new Set()
mySet.add('4')
mySet.add('5')
mySet.add('6')
for (let item of mySet.keys()) {
	console.log(item) // 返回键名
}

for (let item of mySet.values()) {
	console.log(item) // 返回键值
}

for (let [key, value] of mySet.entries()) {
	console.log(key, array) // 返回键值对
}

set转array

let mySet = new Set()
mySet.add('4')
mySet.add('5')
mySet.add('6')

转换为array
Array.form(mySet)

array转为set

const arr = [1,2,4]
new Set(arr)

求交集

let mySet = new Set()
mySet.add(2)
mySet.add('5')
const mySet2 = new Set([2,3])
const intersection = new Set([...mySet].filter(x => mySet2.has(x)))

求差集(在mySet中存在,但是mySet2不存在)

let mySet = new Set()
mySet.add(2)
mySet.add('5')
const mySet2 = new Set([2,3])
const difference = new Set([...mySet].filter(x => !mySet2.has(x)))

总结

技术要点:

  1. 一种无序且唯一的数据结构。不关心顺序,集合里面的元素都是唯一的。
    栈,队列,链表他们里面都有可能出现重复的数据,但是集合里面的元素是唯一的。
    栈,队列,链表它们都有自己的顺序,但是集合是无序的。

  2. Es6中新增了集合:名为Set

  3. 集合的常用操作:去重复,判断某元素是否在集合中,求交集(几个集合里面都存在的元素)

  4. 对set数据结构,key和value是一样的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/463839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用媒体查询实现移动端适配,媒体查询meta标签配置(@media screen and,min-width和max-width)

简述:我们在写网站的时候,难免会遇到需要做移动端适配的需求,今天来记录下使用媒体查询实现移动端的适配。媒体查询是一种CSS技术,可以根据设备屏幕的属性(如宽度、高度、方向和分辨率)选择应用特定样式&am…

火爆全网,JMeter接口自动化测试详细实战(超详细)吐血整理...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 JMeter接口自动化测…

深度学习 - 44.Gate 与 MMOE 实现多目标学习

目录 一.引言 二.摘要 Abstract 三.介绍 Introduction 四.相关工作 RELATED WORK 1.DNN 中的多任务学习 2.SubNet 集成与 Expert 混合 3.多任务学习应用 五.建模方法 MODELING APPROACHES 1.Shared-bottom Multi-task Model 2.Mixture-of-Experts 3.Multi-gate Mixt…

NOPI用法之自定义单元格背景色(3)

NPOI针对office2003使用HSSFWorkbook,对于offce2007及以上使用XSSFWorkbook;今天我以HSSFWorkbook自定义颜色为例说明,Office2007的未研究呢 在NPOI中默认的颜色类是HSSFColor,它内置的颜色有几十种供我们选择,如果不…

模态分解算法 EMD、EEMD、CEEMD

一、模态分解算法EMD算法介绍 (一)模态分解相关的算法有以下几类 IMF 固有模态函数\EMD经验模态分解\EEMD集合经验模态分解\CEEMD 互补集合经验\(EEMD的标准形式)CEEMDAN自适应噪声完备集合经验模态分解\VMD 变分模态分解 &…

Crypko.ai:动漫角色生成和设计平台

【产品介绍】 Crypko.ai是一个基于GAN(生成对抗网络)的高质量动漫角色生成和设计平台,可以让用户通过简单的操作,创造出各种风格和特征的动漫角色,并且可以对角色的头发、脸部、衣服、风格等进行编辑和调整。 Crypko.a…

【GNN】谱域图卷积

谱域图卷积 1. 谱域卷积的背景知识 1.1 谱域图卷积实现思路 f 1 ( t ) ⋆ f 2 ( t ) F − 1 [ F 1 ( w ) F 2 ( w ) ] f_1(t) \star f_2(t) F^{-1}[F_1(w)F_2(w) ] f1​(t)⋆f2​(t)F−1[F1​(w)F2​(w)] 1.2 如何定义图上的傅里叶变换 经典傅里叶变换: x ( …

人工智能+自助餐:一种有效减少食物浪费的创新方案

一、案例背景: 自助餐是一种受欢迎的餐饮形式,可以满足不同顾客的口味和需求。但是,自助餐也存在着浪费食物的问题,有的顾客拿得多吃得少,有的顾客只吃部分食物,剩下的扔掉。据统计,2022年中国…

【算法竞赛】实现约瑟夫问题的四种方法(附手绘图详解)

💌 博客内容:实现约瑟夫问题的四种方法 😀 作  者:陈大大陈 🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信! 💖 欢迎大家&…

视频剪辑配乐技巧 视频剪辑配音推荐

视频是视觉加听觉的艺术,视频的背景音乐不同,所呈现的效果也不同。接下来为大家带来大家视频剪辑配乐技巧,视频剪辑配音推荐的相关内容。 一、视频剪辑配乐技巧 视频剪辑时选好了配乐,视频就成功了一半。那如何找到合适的配乐呢…

yapi一键安装 文档开源系统

访问 GitHub - Ryan-Miao/docker-yapi: Docker build and run yapi as serviceDocker build and run yapi as service. Contribute to Ryan-Miao/docker-yapi development by creating an account on GitHub.https://github.com/Ryan-Miao/docker-yapi git clone https://githu…

Class类

package com.hspedu.reflection.class_;import com.hspedu.Cat;import java.util.ArrayList;/*** author 韩顺平* version 1.0* 对Class类特点的梳理*/ public class Class01 {public static void main(String[] args) throws ClassNotFoundException {//看看Class类图//1. Cla…

python版电报API接入从零到一(有彩蛋)

文章链接 编号分类文章及链接介绍作者来源分类撰写日期收录日期F1框架python版telegram接入开源botpython-telegram-botGithub2023-04-24 申明:本文仅作试验研究用,不对参考本文操作产生的各种结果承担任何责任。 Q&A 使用Telegram的API需要交费吗…

三顾茅庐,七面阿里,成功上岸25k16薪,我行你也行~

写在片头:声明,勿杠 首先简单说一下,这三次面试阿里并不是一次性去面的,实际上第一次面试时候还在大四,找的实习岗,不太清楚是什么部门,别问我为什么还记得面试题,有记录和复盘的习惯…

什么是OADM光分插复用器

文章导读: 什么是OADM光分插复用器 光分插复用器的功能 光分插复用器的类型(FOADM, TOADM) OADM的应用 1、什么是OADM光分插复用器 由不同的光通道进出单模光纤。 它的主要功能是在不影响其他波长信道传输的情况下,选择性地下载或…

Vue(监测数据改变、收集表单数据、过滤器)

一、监测数据改变原理 1. 监测对象数据改变原理 当数据发生改变之后:直接会显示数据改变(一种强硬写法) let data { name: "北京大学", address: "北京" };// 以下通过temp进行监视:还得还原temp值&#xf…

k8s 部署 ldap 服务

1、创建挂载卷,将数据和配置进行持久化存储 1.1、使用nfs作为共享存储 [rootlocalhost openldap_yaml]# cat /etc/exports /dump_file/openldap_db 172.21.53.0/24(rw,sync,no_root_squash,no_all_squash) /dump_file/openldap_conf 172.21.53.0/24(rw,sync,no_roo…

【Linux常见指令以及权限理解】基本指令(1)

写在前面: 相信看完上一个博客,我们已经成功搭建好了Linux环境, 如果没有可以去看看:Linux环境搭建。 接下来我会讲述Linux的常见指令以及权限理解相关内容。 这篇文章会介绍一些常用的Linux指令并穿插一些操作系统的概念理解…

巧用千寻位置GNSS软件|一文教会横断面测量

测横断面主要用于线路工程和水利工程的前期设计中,在线路平曲线设计好之后,千寻位置GNSS软件可用于在中桩处测定垂直于线路中线方向原地貌的地面起伏的数据,本期就为大家介绍具体的操作技巧。 点击【测量】->【测横断面】,选择…

ByteHouse云数仓版查询性能优化和MySQL生态完善

ByteHouse云数仓版是字节跳动数据平台团队在复用开源 ClickHouse runtime 的基础上,基于云原生架构重构设计,并新增和优化了大量功能。在字节内部,ByteHouse被广泛用于各类实时分析领域,最大的一个集群规模大于2400节点&#xff0…