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

165 阅读2分钟

@TOC

集合是什么?

一种无序且唯一的数据结构 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 属于集合中的哪个操作?