Dictionary
Dictionary 는 Key-Value 쌍을 가지며 순서가 없는 Collection 이다. Generic Collection 으로 구현되어있으며 저장할 수 있는 Key와 Value가 명확하다.
따라서 같은 타입의 key 그리고 같은 타입의 value 값의 사이의 관계를 순서 없이 저장할 수 있다.
Dictionary 에서 각 value 는 유일한 key 값과 연결되어있어서 key 값은 value 를 구분할 수 있는 식별자 역할을 한다.
배열과 다르게 dictionary 내부의 자료에 대한 순서가 없으며 식별자를 통해서만 값을 찾을 수 있다.
Dictionary type을 축약형으로 표현할 수 있다.
- 원본: Dictionary<Key, Value>
- 축약본: [Key: Value] ← 선호되는 방식
initializer syntax 를 사용하여 특정 타입의 빈 Dictionary 를 생성할 수 있다.
var namesOfInteger: [Int: String] = **[:]**
// namesOfInteger is an empty [Int: String] dictionary
문맥상 key 와 value 에 대한 type 정보를 이미 알고 있는 경우, empty dictionary literal [:]
를 사용하여 빈 딕셔너리를 생성할 수 있다.
namesOfInteger[16] = "sixteen"
// namesOfIntegers now contains 1 key-value pair
namesOfInteger = [:]
// namesOfIntegers is once again an empty dictionary of type [Int: String]
Dictionary literal 표현을 사용하여 새로운 Dictionary 를 생성하는 방법
Dictionary literal : [ key1: value1, key2: value2, ... ]
var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]]
Dictionary 에 접근(Accessing) 및 수정(Modifying)하는 방법
Property
count
: 딕셔너리 내부의 자료 개수를 찾아준다.
print("The airports dictionary contains \(airports.count) items.")
// Prints "The airports dictionary contains 2 items."
isEmpty
: count property가 0인지 확인한다.
if airports.isEmpty {
print("The airports dictionary is empty")
} else {
print("The airports dictionary isn't empty")
}
Subscript
- dictionary 에 새로운 item 을 추가하는 방법
airports["LHR"] = "London"
- 특정 키에 연관된 값을 변경하는 방법
airports["LHR"] = "London Heathrow"
- 특정 키에 대한 값을 받아오는 방법
if let airportName = airports["DUB"] {
print("The name of the airport is \(airportName).")
} else {
print("That airport isn't in the airports dictionary.")
}
- 특정 키 값을 제거하는 방법
airports["APL"] = "Apple International"
// "Apple International" isn't the real airport for APL, so delete it
airports["APL"] = nil
// APL has now been removed from the dictionary
Method
updateValue(_:forKey:)
: 특정 키에 대한 값을 설정하거나 갱신해주는 메서드- 키가 존재하지 많으면 새로운 값으로 설정
- 키가 존재하면 값을 갱신한 후 이전 값을 반환
- 키에 대한 value 값이 존재하지 않을 수 있어서 optional 값으로 반환
if let oldValue = airports.updateValue("Doublin Airport", forKey: "DUB") {
print("The old value for DUB was \(oldValue).")
}
// Prints : The old value for DUB was Dublin.
if let airportName = airports["DUB"] {
print("The name of the airport is \(airportName).")
} else {
print("That airport isn't in the airports dictionary")
}
// Prints "The name of the airport is Dublin Airport."
removeValue(forKey:)
: 특정 키-벨류 쌍을 제거하고 그 결과를 반환한다.- Dictionary 에 해당 키 값이 존재한다면 제거한 값을 반환한다
- Dictionary 에 해당 키 값이 존재하지 않다면 nil 값을 반환한다.
Dictionary 에서 반복을 돌리는 방법
for-in loop
구문을 통해 dictionary의 key-value 쌍에 대해 iterate 를 돌릴 수 있다.- Dictionary 의 각 item은 (key, value) tuple을 반환한다.
- 반복문을 돌릴 때 tuple 의 멤버를 임시 상수 혹은 변수의 일부로 decompose 할 수 있다.
for (airportCode, airportName) in airports {
print("\(airportCode): \(airportName)")
}
- 필요한 경우 Dictionary의 키 혹은 value 값을 keys, values property를 통해 별도로 가져와서 순회할 수도 있다.
for airportCode in airports.keys {
print("Airport code: \(airportCode)")
// Airport의 키값만 가져온다
}
for airportName in airports.values {
print("Airport name: \(airportName)")
// Airport의 벨류값만 가져온다.
}
Dictionary의 key와 value 값을 Array 의 인스턴스로 생서아하는 방법
let airportCodes = [String](airports.keys)
// airportCodes is ["LHR", "YYZ"]
let airportNames = [String](airports.values)
// airportNames is ["London Heathrow", "Toronto Pearson"]
- Dictionary 는 순서가 정의되지 않았기 때문에 특정 순서로 순회하기 위해서는
sorted()
method 를 사용해야한다.
' Apple > Swift Programming Language' 카테고리의 다른 글
[Swift] 공식문서 씹어먹기: Automatic Reference Counting (0) | 2021.11.21 |
---|---|
[Swift] 공식문서 씹어먹기: Property - Computed Property (0) | 2021.10.22 |
[Swift] 공식문서 씹어먹기: Initialization (0) | 2021.10.18 |
[Swift] 공식문서 씹어먹기: Strings and Characters (0) | 2021.09.23 |
[Swift] 공식문서 씹어먹기: Basic Operators (0) | 2021.09.21 |