Set과 Map

Posted by Seongkyun Yu on 2020-03-24
Estimated Reading Time 3 Minutes
Words 567 In Total
Viewed Times

1. Set과 Map이란

  • Set 객체: 중복되지 않는 유일한 값들의 집합

  • Map 객체: 중복되지 않는 키, 중복 가능한 값의 쌍으로 이루어진 컬렉션


2. Set과 Map 비교

기능 Set Map
순서 의미 X X
생성 new Set(); new Map();
개수 확인 Set#size() Map#size()
요소 추가 Set#add() (중복허용X) Map#add() (키 중복허용X)
요소 확인 Set#has() Map#has()
요소 삭제 Set#delete() Map#delete()
요소 전체삭제 Set#clear() Map#clear()
요소 순회 Set#forEach() Map#forEach()



3. Set과 수학적 집합

3.1 교집합

다음과 같이 교집합을 구할 수 있다.

Intersection.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Set 객체 받아 교집합 구하기
const getIntersection = function (set1, set2) {
let result = new Set();

for (const value of set1) {
if (set2.has(value)) result.add(value);
}

return result;
};

// 배열과 Set 객체 받아 교집합 구해서 배열로 내보내기
const getAllTypeIntersection = function (iter1, iter2) {
iter1 = new Set([...iter1]);
iter2 = new Set([...iter2]);

let result = new Set();

for (const value of iter1) {
if (iter2.has(value)) result.add(value);
}

return [...result];
};

const set1 = new Set([1, 2, 3, 4, 5]);
const set2 = new Set([3, 4, 5, 6, 7]);

console.log(getIntersection(set1, set2)); // Set { 3, 4, 5 }
console.log(getAllTypeIntersection(set1, set2)); // [ 3, 4, 5 ]

3.2 합집합

다음과 같이 합집합을 구현할 수 있다.

union.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Set 객체 받아 합집합 구하기
const getUnion = function (set1, set2) {
let result = new Set(set1);

for (const value of set2) {
result.add(value);
}

return result;
};

// 배열과 Set 객체 받아 합집합 구해서 배열로 내보내기
const getAllTypeUnion = function (iter1, iter2) {
iter1 = new Set([...iter1]);
iter2 = new Set([...iter2]);

let result = new Set(iter1);

for (const value of iter2) {
result.add(value);
}

return [...result];
};

const set1 = new Set([1, 2, 3, 4, 5]);
const set2 = new Set([3, 4, 5, 6, 7]);

console.log(getUnion(set1, set2)); // Set { 1, 2, 3, 4, 5, 6, 7 }
console.log(getAllTypeUnion(set1, set2)); // [ 1, 2, 3, 4, 5, 6, 7 ]

3.3 차집합

차집합(A-B)은 집합 A에는 존재하지만 집합 B에는 존재하지 않는 요소들의 집합이다.

difference.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Set 객체 받아 차집합 구하기
const getDifference = function (set1, set2) {
let result = new Set(set1);

for (const value of set2) {
result.delete(value);
}

return result;
};

// 배열과 Set 객체 받아 차집합 구해서 배열로 내보내기
const getAllDifference = function (iter1, iter2) {
iter1 = new Set([...iter1]);
iter2 = new Set([...iter2]);

let result = new Set(iter1);

for (const value of iter2) {
result.delete(value);
}

return [...result];
};

const set1 = new Set([1, 2, 3, 4, 5]);
const set2 = new Set([3, 4, 5, 6, 7]);

console.log(getDifference(set1, set2)); // Set { 1, 2 }
console.log(getAllDifference(set1, set2)); // [ 1, 2 ]

3.4 부분 집합과 상위 집합

집합 A가 집합 B에 포함되는 경우(A⊆B), 집합 A는 집합 B의 부분 집합이며 집합 B는 집합 A의 상위 집합이다.

isSuperset.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Set 객체 받아 상위집합 여부 구하기
const getIsSuperset = function (set1, set2) {
for (const value of set2) {
if (!set1.has(value)) return false;
}

return true;
};

// 배열과 Set 객체 받아 상위집합 여부 구하기
const getAllIsSuperset = function (iter1, iter2) {
iter1 = new Set([...iter1]);
iter2 = new Set([...iter2]);

for (const value of iter2) {
if (!iter1.has(value)) return false;
}

return true;
};

console.log(getIsSuperset(set1, set2)); // false
console.log(getAllIsSuperset(set1, set2)); // false

참고자료: poiemaweb.com


If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !