나의 발자취

스위프트 컬렉션(3) Set 본문

앱 개발/iOS

스위프트 컬렉션(3) Set

달모드 2022. 5. 26. 02:15

Dictonary처럼 Set도 hashable해야한다. 그렇기때문에 정렬속도보다 검색속도가 빠른 경우에 사용할 수 있다.

집합의 성질을 이용한다.

 

 - Set의 문법 약속

 - 생김새는 배열과 같음(따라서, 생성시 타입을 선언 해야함)

 - 수학에서의 집합과 동일하기 때문에 요소는 유일해야함(순서가 존재하지 않음)

 

타입 표기

// 단축문법

let set1: Set = [1, 2, 3]

// 정식문법

let set2: Set<Int> = [1, 2, 3]

 

빈 set 생성

let emptySet: Set<Int> = []

let emptySet1 = Set<Int>()

 

 

기본 기능

set.count

set.isEmpty

set.contains(1)

set.randomElement()

 

 

업데이트 (update) - 삽입하기 / 교체하기 / 추가하기

// 서브스크립트 관련 문법 없음 ⭐️

// (정식 기능) 함수 문법

set.update(with: 1)     // Int 타입을 반환(기존에 값이 있었다면)

set.update(with: 7)     // 새로운 요소가 추가되면 nil 타입을 반환

 

 

 

//:> Set는 append 함수를 제공하지 않음

// append는 순서가 있는 컬렉션의 끝에 추가하는 개념

// Set은 순서가 없기 때문에, update를 통해서 추가

 

 

 

삭제(제거)하기 (remove)

var stringSet: Set<String> = ["Apple", "Banana", "City", "Swift"]

 

// 요소 삭제해 보기

stringSet.remove("Swift")     // "Swift" 삭제한 요소를 리턴

stringSet                     // ["Hello", "Apple"]

 

// 존재하지 않는 요소를 삭제해보기

stringSet.remove("Steve")       // nil    (에러는 발생하지 않음)

 

// 전체요소 삭제

stringSet.removeAll()

stringSet.removeAll(keepingCapacity: true)

 

 

 

Set의 활용

* Set의 정의

 

var a: Set = [1, 2, 3, 4, 5, 6, 7, 8, 9]

var b: Set = [1, 3, 5, 7, 9]

var c: Set = [2, 4, 6, 8, 10]

var d: Set = [1, 7, 5, 9, 3]

 

 

 * Set의 비교

a == b

a != b

//Set(정렬되지 않은 컬렉션)은 어차피 순서는 중요하지 않음

b == d  // 항상 true

 

 

부분집합 / 상위집합 / 서로소

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

b = [1, 3, 5, 7, 9]     // 홀수 모음

c = [2, 4, 6, 8, 10]    // 짝수 모음

d = [1, 7, 5, 9, 3]     // 홀수 모음

 

 

 

부분집합 여부

b.isSubset(of: a)   // true, 부분집합 여부

b.isStrictSubset(of: a)   // false, 진부분집합 여부

 

 

 

상위집합

a.isSuperset(of: b)    // true 상위집합 여부

a.isStrictSuperset(of: b)   // false  진상위집합 여부

 

 

서로소 여부

d.isDisjoint(with: c)

 

 

* 합집합

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

b = [1, 3, 5, 7, 9]

c = [2, 4, 6, 8, 10]

d = [1, 7, 5, 9, 3]

 

 

var unionSet =  b.union(c)

// b.formUnion(c)      // 원본 변경

 

 

* 교집합

var interSet = a.intersection(b)

 

// a.formIntersection(b)      // 원본 변경

 

 

* 차집합

var subSet = a.subtracting(b)

 

// a.subtract(b)       // 원본 변경

 

 

* 대칭차집합

var symmetricSet = a.symmetricDifference(b)

 

// a.formSymmetricDifference(b)       // 원본변경

 

 

 

 * 반복문과의 결합

let iteratingSet: Set = [1, 2, 3]

 

for num in iteratingSet {    // 정렬되지 않은 컬렉션이기 때문에, 실행할때마다 순서가 달라짐

    print(num)

}

 

 

 

 * 기타 유의점

var newSet: Set = [1, 2, 3, 4, 5]

var newArray: Array = newSet.sorted()

 

-> Set을 정렬하면, 배열로 리턴함 (정렬은 순서가 필요하기 때문)

 

 

 

 

'앱 개발 > iOS' 카테고리의 다른 글

열거형  (0) 2022.05.27
컬렉션 관련 이론: KeyValuePairs, Copy-On-Write 최적화  (0) 2022.05.26
스위프트 컬렉션(2) 딕셔너리  (0) 2022.05.25
스위프트 컬렉션 (1) 배열  (0) 2022.05.25
함수와 옵셔널타입  (0) 2022.05.24
Comments