(六)数据结构之“集合”

集合是什么?

一种无序且唯一的数据结构
ES6中有集合,名为Set
集合的常用操作:去重、判断某元素是否在集合中、求交集

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

// 判断元素是否在集合中
const set = new Set(arr);
const has = set.has(3);

// 求交集
const set2 = new Set([2, 3]);
const set3 = new Set([...set].filter(item => set2.has(item)));

LeetCode:349.两个数组的交集

输入:nums1 = [1,2,2,1],nums2 = [2,2]
输出:[2]

解题思路
求交集且无序唯一
使用集合
解题步骤
用集合对nums1去重
遍历nums1,帅选出nums2中包含的值
在这里插入图片描述
时间复杂度O(m * n),空间复杂度O(m)
m是去重后nums1的长度,n是nums2的长度
nums1和nums2都是已有的存储,额外临时的存储是num1去重后的长度

前端与集合:使用ES6的Set

Set操作
使用Set对象:new、add、delete、has、size
迭代Set:多种迭代方法、Set与Array互转、求交集/差集

let mySet = new Set();//new

mySet.add(1);//add
mySet.add(5);
mySet.add(5);//因为唯一性,mySet只会有一个5
mySet.add('some text');
let o = { a: 1, b: 2 };
mySet.add(o);
mySet.add({ a: 1, b: 2 });//存储地址不一样,会被添加

const has = mySet.has(o);//has
//size为5
mySet.delete(5);//delete
//size为4

//多种迭代方法
for(let item of mySet) console.log(item);
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, value);//key和value一样

//Set > Array
const myArr = [...mySet];
const myArr = Array.from(mySet);

//Array > Set
const mySet2 = new Set([1,2,3,4]);

//求交集(mySet和mySet2中都有的)
const intersection = new Set([...mySet].filter(x => mySet2.has(x)));
//求差集(mySet中有,mySet2中没有的)
const difference = new Set([...mySet].filter(x => !mySet2.has(x)));

思考题

1、在你的实际工作中使用集合完成一次去重操作
2、了解数据库中的 join 操作符吗?inner join 属于集合中的哪个操作?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值