Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트에서 두 집합(Set) 합치기 — 유니온(Union) 연산 구현 방법

두 개의 집합을 더하는 연산을 합집합(Union)이라고 합니다. 합집합을 구하려면 한 집합의 모든 요소를 다른 집합에 추가하면서 중복 여부를 확인해야 합니다. 다행히 앞서 이미 구현한 메서드들을 활용하면 이 기능을 손쉽게 만들 수 있습니다.

이 함수는 정적(static) 함수로 구현하는 것이 좋습니다. 기존 집합을 변경(mutation)하는 대신 새로운 집합을 생성하여 반환하기 때문입니다. 먼저 전달된 객체가 실제로 MySet 클래스의 인스턴스인지 검사하는 과정이 필요합니다.

구현 예제

static union(s1, s2) {
    if (!s1 instanceof MySet || !s2 instanceof MySet) {
        console.log("The given objects are not of type MySet");
        return null;
    }
    let newSet = new MySet();
    s1.forEach(elem => newSet.add(elem));
    s2.forEach(elem => newSet.add(elem));
    return newSet;
}

다음과 같이 테스트해 볼 수 있습니다.

테스트 예제

const testSet1 = new MySet();
testSet1.add(1);
testSet1.add(2);

const testSet2 = new MySet();
testSet2.add(2);
testSet2.add(5);

let testSet3 = MySet.union(testSet1, testSet2);
testSet3.display();

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

{ '1': '1', '2': '2', '5': '5' }

주목할 점은 ES6의 표준 Set API에도 union 함수가 포함되어 있지 않다는 것입니다. 다음과 같이 작성하면 이 함수를 표준 Set 클래스에서도 사용할 수 있도록 확장할 수 있습니다.

ES6 Set 클래스 확장

Set.union = function(s1, s2) {
    if (!s1 instanceof Set || !s2 instanceof Set) {
        console.log("The given objects are not of type Set");
        return null;
    }
    let newSet = new Set();
    s1.forEach(elem => newSet.add(elem));
    s2.forEach(elem => newSet.add(elem));
    return newSet;
}

마찬가지로 아래 코드로 동작을 확인할 수 있습니다.

테스트 예제

let setA = new Set([1, 2, 3, 4]);
let setB = new Set([2, 3]);
console.log(Set.union(setA, setB));

실행 결과

위 코드를 실행하면 중복 없이 모든 요소가 포함된 새로운 집합이 출력됩니다.

Set { 1, 2, 3, 4 }