728x90
240315
Dictionary 특징
- 키와 값을 하나의 요소로 저장한다
- 정렬되지 않는 컬렉션
- 키와 값의 타입이 모두 같아야함
정식문법
Dictionary<k,v>
콤마사용!
단축문법
[k:v]
콜론사용
let dict1: Dictionary<String, Int>
let dict2: [String: Int]
요소 만들기
var dict = ["A": "Apple", "B": "Banana"]
초기화(빈 딕셔너리 만들기)
dict = [:] //빈배열을 저장하거나
dict = [String: String]() //생성자를 사용해도 됨
dict = Dictionary<String, String>() //정식문법으로 작성한 코드
요소 갯수 확인과 비어있는지 확인
let words = ["A": "Apple", "B": "Banana", "C": "City"]
words.count //갯수 확인. 배열이랑 똑같쥬
words.isEmpty // 비어있는지 확인. 이것도 배열이랑 같음 겹치는 메소드가 많음
배열이랑 같은 메소드가 많다
Accessing Keys and Values
항상 키를 사용해서 값을 가져온다
let words = ["A": "Apple", "B": "Banana", "C": "City"]
words["A"] //Apple
words["Apple"] //nil 무조건 키의 값만 넣을 수 있음
let a = words["E"]
let b = words["E", default: "Empty"] //E 키가 없을 때 기본값 Empty 를 리턴해준다
a //옵셔널 스트링
b // 넌옵셔널 스트링
딕셔너리 특징 중에 정렬되지 않는다고 했다
아래 코드로 확인 가능하다
새로 불러올 때마다 순서가 달라지는걸 볼 수 있다
for k in words.keys {
print(k) //정렬 되지 않아서 순서가 계속 바뀜
}
for v in words.values {
print(v)
}
동일한 순서로 처리하고 싶다면 sorted 사용 하면된다
for k in words.keys.sorted() {
print(k)
}
Array()
두 속성이 리턴하는 값을 배열로 받고 싶다면 .
근데 역시나 순서 고정 안됨. 왜냐 딕셔너리는 정렬되지 않으니까
let keys = Array(words.keys)
let values = Array(words.values)
새로운 요소 추가 Adding Keys and Values
위에서 값에 접근 할 때는 key를 사용한다고 했다. 새로운 요소를 추가할 때도 key를 사용한다.
//예제코드
var mutableDict = [String: String]()
//값저장하기
mutableDict["A"] = "Apple"
mutableDict["B"] = "Banana"
서브스크립트 문법으로 새로운 값 저장
//B 키에 새로운 값 저장
mutableDict["B"] = "Ball"
mutableDict.count //2 여전히 카운트 똑같음
**알아두기
Upsert: Ipdate + Insert
키가 없었다면 새로 저장하고, 키가 존재 한다면 기존에 연결되어 있던 값을 새로운 값으로 바꾼다
.updateValue
메소드로 새로운 값 저장
mutableDict.updateValue("City", forKey: "C")
mutableDict
Removing Key and Values 삭제
서브스턴스 문법으로 삭제
가장 쉬운 방법은 nil 을 저장하는 것
메소드로 삭제
removeValue(forkey: )
삭제할 값이 있으면 삭제한걸 리턴하고, 값이 없으면 nil 리턴. 리턴값을 통해서 실제로 삭제 했는지 확인 할 수 있음
mutableDict.removeValue(forKey: "A") //삭제한 값 리턴 Apple
Comparing Dictionaries 비교
let first = ["A": "Apple", "B": "Banana", "C": "City"]
let second = ["A": "Apple", "C": "City", "B": "Banana"]
first == second //true
first != second //false
기타 등등등
사실 아래 코드는 find(클로저) 를 이해 못해서 이해 안감 ㅋㅋ
이해해서 다시 돌아올게,,,
let find: ((key: String, value: String)) -> Bool = {
$0.key == "B" || $0.value.contains("i") //키에 B가 있거나,값에 i 가 포함되어 있으면 true 를 리턴하는 코드
}
first.contains(where: find) //true
first.first(where: find) //항상 같은 결과가 나오지 않음. 정렬되어 있지 않기 때문에
first.filter(find) //검색된 모든 요소를 새로운 딕셔너리로 보여줌
728x90
'iOS Swift > 문법' 카테고리의 다른 글
[Swift] Enumeration Types 열거형 (0) | 2024.03.15 |
---|---|
[Swift] Functions ,Parameter, Argument Label (2) | 2024.03.15 |
[Swift] Break, continue Statement (3) | 2024.03.14 |
[Swift] Loop Statements (Range Operators, for-in Loop) (0) | 2024.03.14 |
[Swift] Assignment Operators 할당 연산자 (0) | 2024.03.14 |
댓글