본문 바로가기

Computer Programming/Javascript

자바스크립트 자료구조 Map과 Set Object의 사용

1. Map이란?

- key / value pair

- key 또는 value에 어떠한 데이터타입도 다 들어올 수 있으며 정렬된 순서로 저장된다.

- 한 맵에서의 키는 오직 단 하나만 존재한다. (Map 집합의 유일성)

- 검색, 삭제, 제거, 여부 확인 등 제공

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Map

 

const myMap = new Map();
myMap.set('key', 'value')

console.log(myMap.get('key')); //value에 접근

-맵에서의 반복은 keys(), values(), entries()의 메소드 사용으로 이루어진다. (키, 값 및 키-값 쌍 반복) => Map Iterator를 반환한다.

 

- for~of 문을 통한 Iterator의 반복 (keys(), values(), entries())

- 반복은 삽입한 순서대로 진행도니다 (set 순서대로)

const myMap = new Map();

myMap.set('one' , 1)
myMap.set('two' , 2)
myMap.set('three' , 3)

const myKeys = myMap.keys() //Map Iterator 형

//Iterator형은 for-of 문을 사용하여 반복문을 작성한다.

for (const nums of myKeys) {
    console.log(nums)
}

 

- Map의 크기 확인하기

console.log(myMap.size)

 

- Map 요소 여부 확인하기 (키로 확인) => boolean

console.log(myMap.has('two'))  //return true

 

Reference : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Map

 

Map - JavaScript | MDN

Map 객체는 키-값 쌍과 키의 원래 삽입 순서를 기억합니다. 모든 값(객체 및 원시 값 모두)은 키 또는 값으로 사용될 수 있습니다.

developer.mozilla.org

 

 

2. Set 이란?

Set

- 값 콜랙션으로, 고유한 값을 저장하는 자료구조이다. (값이 중복되지 않는 유일한 요소로만 저장)

- 키는 저장하지 않고 값만 저장한다.

- Set 또한 삽입 순서대로 요소를 순회할 수 있다.

- 값 추가, 검색, 삭제, 모든 값 제거, 존재 여부 확인 제공

 

const mySet = new Set()
mySet.add('value1');
mySet.add('value2')
mySet.add('value2')

console.log(mySet) // Set(2) { 'value1' , 'value2'}
console.log(mySet.size) // 2
console.log(mySet.has('value2')) // true

 

Iterator

- for ~ of 문 사용 가능

for (const value of mySet.values()) {
    console.log(value)
}

//value1, value2

- 기본 집합 연산도 구현이 가능하다. (MDN)

Set.prototype.isSuperset = function(subset) {
    for (var elem of subset) {
        if (!this.has(elem)) {
            return false;
        }
    }
    return true;
}

Set.prototype.union = function(setB) {
    var union = new Set(this);
    for (var elem of setB) {
        union.add(elem);
    }
    return union;
}

Set.prototype.intersection = function(setB) {
    var intersection = new Set();
    for (var elem of setB) {
        if (this.has(elem)) {
            intersection.add(elem);
        }
    }
    return intersection;
}

Set.prototype.difference = function(setB) {
    var difference = new Set(this);
    for (var elem of setB) {
        difference.delete(elem);
    }
    return difference;
}

//Examples
var setA = new Set([1, 2, 3, 4]),
    setB = new Set([2, 3]),
    setC = new Set([3, 4, 5, 6]);

setA.isSuperset(setB); // => true
setA.union(setC); // => Set [1, 2, 3, 4, 5, 6]
setA.intersection(setC); // => Set [3, 4]
setA.difference(setC); // => Set [1, 2]