[스위프트 기초] 5. 컬렉션 타입(Array, Dictionary, Set)

Seoyoung Lee·2022년 2월 24일
0


2021년 11월 15일에 공부한 내용입니다.

컬렉션 타입

  • Array: 순서가 있는 리스트 컬렉션
  • Dictionary: 키와 값의 쌍으로 이루어진 컬렉션. HashMap과 유사하다.
  • Set: 순서가 없고 멤버가 유일한 컬렉션

1. Array

  • 멤버가 순서(인덱스)를 가진 리스트 형태의 컬렉션 타입
  • 여러가지 리터럴 문법을 활용할 수 있어 표현 방법이 다양하다.
// Array 선언 및 생성
// 모두 동일한 표현이다.
var integers: Array<Int> = Array<Int>()
var integers: Array<Int> = []
var integers: [Int] = Array<Int>()
var integers: [Int] = [Int]()
var integers: [Int] = []
var integers = [Int]()

// Array 활용
integers.append(1)
integers.append(100)
integers.contains(100) // true
integers.remove(at: 0)
integers.removeLast()
integers.removeAll()
integers.count
integers[0] = 99 // 멤버 교체

// 불변 Array: let을 사용하여 선언
// 멤버를 추가하거나 삭제할 수 없다.
let immutableArray = [1, 2, 3]

2. Dictionary

  • 키와 값의 쌍으로 이루어진 컬렉션 타입
  • Array와 비슷하게 여러가지 리터럴 문법을 활용할 수 있어 표현 방법이 다양하다.
var anyDictionary: Dictionary<String, Any> = [String: Any]()
var anyDictionary: Dictionary<String, Any> = [:]
var anyDictionary: [String: Any] = Dictionary<String, Any>()
var anyDictionary: [String: Any] = [String: Any]()
var anyDictionary: [String: Any] = [:]
var anyDictionary: [String: Any]()

// Dictionary 활용
// 키에 해당하는 값 할당
anyDictionary["someKey"] = "value"
anyDictoinary["anotherKey"] = 100

print(anyDictionary) // ["someKey": "value", "anotherKey": 100]

// 키에 해당하는 값 변경
anyDictionary["someKey"] = "dictionary"

// 키에 해당하는 값 제거
anyDictionary.removeValue(forKey: "anotherKey")
anyDictionary["someKey"] = nil // 위와 거의 동일하다.

// 불변 Dictionary
let emptyDictionary: [String: String] = [:]
let initializedDictonary: [String: String] = ["name"; "240", "gender"; "female"]

// 불변 Dcitionary이므로 값 변경 불가능하다.
// 키에 대핟하는 값을 다른 변수나 상수에 할당하고자 하는 경우는 이후 옵셔널과 타입 캐스팅 파트에서 배운다.
// "name"이라는 키에 해다앟는 값이 없을 수 있으므로 String 타입의 값이 나올 것이라는 보장이 없다.
// 따라서 컴파일 오류가 발생한다.
let someValue: String = initializedDictionary["name"]

3. Set

var integerSet: Set<Int> = Set<Int>()

integerSet.insert(1)
integerSet.contains(1)
integerSet.remove(99)
integerSet.count

Set는 축약 문법이 없다.


Set의 활용

멤버의 유일성이 보장되기 때문에 집합 연산에 활용하면 유용하다.

let setA: Set<Int> = [1, 2, 3, 4, 5]
let setB: Set<Int> = [3, 4, 5, 6, 7]

// 합집합
let union: Set<Int> = setA.union(setB)
print(union) // [2, 4, 5, 6, 7, 3, 1]

// 합집합 오름차순 정렬
let sortedUnion: [Int] = union.sorted()
print(sortedUnion) // [1, 2, 3, 4, 5, 6, 7]
// sorted() 메소드를 활용하면 같은 타입의 정렬된 배열을 얻을 수 있다.

// 교집합
let intersection: Set<Int> = setA.intersection(setB)
print(intersection) // [5, 3, 4]

// 차집합
let subtracting: Set<Int> = setA.subtracting(setB)
print(subtracting) // [2, 1]
profile
나의 내일은 파래 🐳

0개의 댓글