관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift 공식 문서] 4. Collection Types (컬렉션 타입) 본문

swift 공식 문서

[iOS - swift 공식 문서] 4. Collection Types (컬렉션 타입)

jake-kim 2021. 6. 19. 14:38

Swift 컬렉션은 3가지

  • Array
  • Set
  • Dictionary

Array

  • 갯수와 값을 지정한 초기화
let intArr = [Int](repeating: 0, count: 10)
  • 추가: '+=' 연산자 사용
intArr += [2]
  • 삽입: insert(_:at:)
    • 기존에 at에 있던 값은 오른쪽으로 밀려나는 형태
var intArr = [Int](repeating: 0, count: 3) // [0, 0, 0]
intArr.insert(2, at: 1) // [0, 2, 0, 0]
  • 삭제: remove(at:)
var intArr = [Int](repeating: 0, count: 3) // [0, 0, 0]
intArr.insert(2, at: 1) // [0, 2, 0, 0]
let removedValue = intArr.remove(at: 1) // [0, 0, 0]
  • 첫번째, 마지막 삭제: removeFirst(), removeLast()

 Set

  • 집합은 hash로 구성
    • 알고리즘에서 특정 값이 존재하는지 체크할 땐 Dictionary 컬렌션보다는 Set 사용
  • 사용
    • 일일이 추가하는 방법
let strArr = ["jake", "kim", "john", "Lee"]
var set = Set<String>()

for str in strArr {
    set.insert(str)
}

print(set) // ["john", "jake", "kim", "Lee"]
  • Set 초기화에 Array을 삽입
let strArr = ["jake", "kim", "john", "Lee"]
var set = Set(strArr)

print(set) // ["kim", "john", "jake", "Lee"]
  • 제거: remove(_:)
let strArr = ["jake", "kim", "john", "Lee"]
var set = Set(strArr)
set.remove("kim")
print(set) // ["john", "jake", "Lee"]
  • 특정 항목이 포함되어 있는지 확인: contains(_:)
let strArr = ["jake", "kim", "john", "Lee"]
var set = Set(strArr)
set.contains("john") // true
  • Set은 순서가 없고 만약 정렬된 값을 사용하고 싶은 경우: sorted()
let strArr = ["홍길동", "김하나", "이상해씨", "파이리"]
var set = Set(strArr)
for value in set.sorted() {
    print(value, terminator: " ") // 김하나 이상해씨 파이리 홍길동
}

집합 연산

  • 4가지 집합 연산

  • 예시
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNuimbers: Set = [2, 3, 5, 7]

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

// [1, 9]
oddDigits.subtracting(singleDigitPrimeNuimbers)

// [1, 2, 9]
oddDigits.symmetricDifference(singleDigitPrimeNuimbers

// []
oddDigits.intersection(evenDigits)

집합 포함 확인 연산

  • isSubset(of:), isSuperset(of:)
  • isStrictSubset(of:), isStrictSuperset(of:)
    • strict의미: 두 집합이 같으면 false
  • isDisjoint(with:)
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let randomDigits: Set = [1, 3]

oddDigits.isSubset(of: randomDigits) // false
oddDigits.isSuperset(of: randomDigits) // true
oddDigits.isDisjoint(with: evenDigits) // true

let sameOddDigits: Set = oddDigits
oddDigits.isSuperset(of: sameOddDigits) // true
oddDigits.isStrictSuperset(of: sameOddDigits) // false

Dictionary

  • 추가: index자리에 바로 추가
var dict: [String: Int] = [:]
dict["abc"] = 1 // ["abc": 1]
  • 삭제
var dict: [String: Int] = [:]
dict["abc"] = 1
dict["abc"] = nil // [:]
  • Dictionary -> Array
    • keys 값을 배열로: [타입](dict.keys)
    • values 값을 배열로: [타입](dict.values)
var dict: [String: Int] = [:]
dict["abc"] = 1

let stringArr = [String](dict.keys)
let intArr = [Int](dict.values)
  • 반복문 key or value 선택 가능
    • dict.keys
    • dict.values
for key in dict.keys {
}

for value in dict.values {
}

for (key, value) in dict {
}

* 참고

https://docs.swift.org/swift-book/LanguageGuide/CollectionTypes.html

Comments