반응형
안녕하세요 공부하는 개발자 입니다.
오늘 포스팅은 swift의 collection중 하나인 dictionary입니다.
이 사전의 경우에는 자바의 map과 많이 닮아 자바를 공부해보신 분들이라면 쉽게 적용해내실 수 있습니다.
🔔 Dictionary 선언
1
2
3
|
var dict = ["A" : "Apple", "B" : "Banana"]
// dictionary의 빈값 만들기
dict = [:]
|
cs |
기본적인 선언 입니다.
이런식으로 [key : value]로 선언하되 빈값을 선언 할 때는 :를 표시하지 않는다면 Array로 선언하는 것과 같기 때문에
필수적으로 선언 해줘야 합니다.
🔔 Dictionary 타입
1
2
|
let dict1: Dictionary<String, Int>
let dict2: [String: Int]
|
cs |
Dictionary로 타입을 선언할때는 항상 key와 value를 선언해줘야 합니다.
🔔 Dictionary 값의 접근
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//디셔너리의 값에 접근하여면 서브스크립트 함수를 이용한다.
words["A"]
//만약 키값이 없는 값이면 nil반환, default를 써주면 nil대신 리턴
let a = words["E"]
let b = words["E", default: "Empty"]
//딕셔너리는 words.keys_키목록, words.values 을 통해서 for문으로 열거 가능
for k in words.keys.sorted(){
print(k)
}
for v in words.values{
print(v)
}
//dictionary의 경우에는 array로 변환이 가능하다.
let keys = Array(words.keys)
let values = Array(words.values)
|
cs |
🔔 Dictionary 값의 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
var words = [String: String]()
words["A"] = "Apple"
words["B"] = "Banana"
words.count //2
words
//키가 없다면 새로운 값을 집어넣지만 키가 존재한다면 딕셔너리의 값이 덮어 씌워진다.
words["B"] = "Ball"
words.count //2
words
//같은 키값에 새로운 값을 업데이트 할때 키값이 없으면 insert 하고 nil반환 , 있으면 update하고 이전 value리턴
words.updateValue("City", forKey: "C")
words.updateValue("Circle", forKey: "C")
//이러한 기능을 upsert라 한다.
|
cs |
🔔 Dictionary 값의 삭제
1
2
3
4
5
6
7
8
9
|
words["B"] = nil
words
//존재하지 않은 값을 삭제할 때는 에러가 뜨지 않고 그 다음 동작을 진행한다.
words["Z"] = nil
//메서드를 이용하여 삭제하면 삭제된 value를 return한다.
words.removeValue(forKey: "A")
words.removeValue(forKey: "A")
//전체삭제는 removeAll
words.removeAll()
|
cs |
🔔 Dictionary 값의 비교
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
let a = ["A": "Apple", "B": "Banana", "C": "City"]
let b = ["A": "Apple", "C": "City", "B": "banana"]
//딕셔너리의 순서는 상관없이 키와 값이 같다면 같은 딕셔너리라고 판단함 단 대소문자가 구분됨
a == b
a != b
//a.elementsEqual(b) { (lhs, rhs) -> Bool in
// return lhs.key.caseInsensitiveCompare(rhs.key) == .orderedSame &&
// lhs.value.caseInsensitiveCompare(rhs.value) == .orderedSame
//}
//대소문자 비교를 위와 같이 진행한다면 항상 같은 값을 받을 수 없기 때문에 항상 키값을 정렬한 다음 진행해야 한다.
let aKey = a.keys.sorted()
let bKey = b.keys.sorted()
aKey.elementsEqual(b.keys) { (lhs, rhs) -> Bool in
guard lhs.caseInsensitiveCompare(rhs) == .orderedSame else{
return false
}
guard let lv = a[lhs], let rv = b[rhs],
lv.caseInsensitiveCompare(rv) == .orderedSame else{
return false
}
return true
}
|
cs |
🔔 Dictionary 검색
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
var words = ["A": "Apple", "B": "Banana", "C": "City"]
let c: ((String, String)) -> Bool = {
$0.0 == "B" || $0.1.contains("i")
}
words.contains(where: c)
//값을 조건으로 검색 후 첫번째 인자를 주는 메서드 return을 튜플로 전달받음
words.first(where : c)
let r = words.first(where: c)
r?.key
r?.value
//조건을 만족시키는 모든값 리턴받는 메서드
words.filter(c)
|
cs |
반응형
'Ios > Swift' 카테고리의 다른 글
[Swift] Structure & Class 스위프트 구조체와 클래스 (0) | 2022.07.09 |
---|---|
[Swift] Swift Collection Set 스위프트 set (0) | 2022.06.30 |
[Swift] Swift Collection Array_3 스위프트 배열_3 (0) | 2022.06.27 |
[Swift] Swift Collection Array_2 스위프트 배열_2 (0) | 2022.06.26 |
[Swift] Swift Collection_Array 스위프트 배열 (0) | 2022.06.25 |