콜렉션 타입 (Collection Types) - 집합 연산 수행 (Performing Set Operations)

00yhsp·2024년 4월 4일

두 집합을 합치거나 두 집합의 공통 값을 구하거나 두 집합이 모두 같은 값을 갖고 있거나 한쪽에만 존재하거나 아예 없거나와 같은 기본적인 집합 연산을 효율적으로 수행할 수 있다.

기본 집합 연산 (Fundamental Set Operations)

아래 그림은 두 집합 a 와 b 의 여러가지 집합 연산에 대한 결과를 나타낸다.

  • intersection(_:) 메서드를 사용하면 두 집합의 공통 값을 가지는 새로운 집합을 생성한다.
  • symmetricDifference(_:) 메서드를 사용하면 두 집합의 공통 값을 제외한 새로운 집합을 생성한다.
  • union(_:) 메서드를 사용하면 두 집합의 모든 값으로 새로운 집합을 생성한다.
  • subtracting(_:) 메서드를 사용하면 특정 집합의 공통 값을 제외한 새로운 집합을 생성한다.
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]

oddDigits.union(evenDigits).sorted()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
oddDigits.intersection(evenDigits).sorted()
// []
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
// [1, 9]
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted()
// [1, 2, 9]

집합 멤버십과 동등성(Set Membership and Equality)

아래 그림은 세 집합 a, b, c 를 나타내며 집합의 공통 요소는 겹쳐서 표현하고 있다.
a 는 b 의 모든 요소를 포함하므로 집합 a 는 b 의 초집합 (superset) 이라 한다.
반대로 b 의 모든 요소가 a 에 포함되어 있으므로 집합 b 는 집합 a 의 부분집합 (subset) 이라 한다.
집합 b 와 집합 c 는 공통 요소가 없으므로 분리집합 (disjoint) 이라 합니다.

  • 두 집합이 같은 값을 모두 포함하고 있는지 판단하려면 "같음" 연산자 (==)를 사용한다.
  • isSubset(of:) 메서드를 사용하면 집합이 특정 집합에 모든 값이 포함되어 있는지 판단한다.
  • isSuperset(of:) 메서드를 사용하면 집합에 특정 집합에 모든 값을 포함 하는지 판단한니다.
  • isStrictSubset(of:) 또는 isStrictSuperset(of:) 메서드를 사용하면 집합이 특정 집합과 같지 않고 부분집합인지 초집합인지 판단한다.
  • isDisjoint(with:) 메서드를 사용하면 두 집합이 공통 값이 없는지 판단한다.
let houseAnimals: Set = ["🐶", "🐱"]
let farmAnimals: Set = ["🐮", "🐔", "🐑", "🐶", "🐱"]
let cityAnimals: Set = ["🐦", "🐭"]

houseAnimals.isSubset(of: farmAnimals)
// true
farmAnimals.isSuperset(of: houseAnimals)
// true
farmAnimals.isDisjoint(with: cityAnimals)
// true
profile
iOS Dev

0개의 댓글