iOS 스터디 Part2 Set

기본적으로 각 요소가 한 번씩만 나타나며 정렬되지 않는 컬렉션 유형입니다.

Advanced Swift (by Chris Eidhof) 책을 번역 후 참고하여 작성하였습니다.

특징.

  • Hash Table로 구현되어 있기 때문에(순서가 없는 Hashable한 값들의 유일한 집합) 값을 검색하는 것은 기본적으로 상수 시간 O(1)입니다.

  • iterator이기 때문에 loop, filter, map 연산 가능

    단, 순서보장이 안되므로

    1. 정렬이 필요할 경우: sorted() 함수 사용

    let sortedSet = originSet.sorted()

    2. 원본 순서가 필요할 경우: 클로저 사용하여 Sequence extension 선언

    extension Sequence where Element: Hashable { 
    	func unique() -> [Element] {
    		let seen: Set<Element> = [] 
    		return !lter { element in
    			if seen.contains(element) { 
    				return false
    			} else{ 
    				seen.insert(element) return true
    			}
    		}
    	} 
    }

Protocols.

  • ExpressibleByArrayLiteral: 배열 초기화

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

  • SetAlgebra: 집합 연산

    // 차집합
    let iPods: Set = ["iPod touch", "iPod nano", "iPod mini", "iPod shuf!e", "iPod classic"]
    let discontinuedIPods: Set = ["iPod mini", "iPod classic", "iPod nano", "iPod shuf!e"]
    let currentIPods = iPods.subtracting(discontinuedIPods) // ["iPod touch"]
    
    // 교집합
    let touchscreen: Set = ["iPhone", "iPad", "iPod touch", "iPod nano"] 
    let iPodsWithTouch = iPods.intersection(touchscreen)
    // ["iPod nano", "iPod touch"]
    
    // 합집합
    var discontinued: Set = ["iBook", "PowerBook", "Power Mac"]
    let unionIPods = discontinued.formUnion(discontinuedIPods) // ["iPod classic", "Power Mac", "iPod nano", "iPod shuf!e", "iBook", "iPod mini", "PowerBook"]

Next Steps.

Set, Dictionary는 기본적으로 Hash Table를 사용하기 때문에 해당 개념을 정리하고 다른 Collection 유형과 비교해볼 예정이다.

Last updated