딕셔너리의 기본 속성
key : value 함께 저장되는 자료구조
정렬되지 않은 컬렉션
값은 중복 가능, 키는 중복되면 안된다.
1. 딕셔너리 생성
var dict1: [String:Any] = [:] //빈 딕셔너리 생성
var dict2: [String:Any] = ["name":"hongssup", "age":20]
var dict3 = Dictionary<String, Any>() //생성자로 생성
var dict4 = [String:Any]()
value 값에는 타입을 Any로 설정해주면 String, Int 아무거나 올 수 있지만
key 값은 타입을 지정해주어야 한다.
key 값을 Any 로 설정해주면 다음과 같은 경고가 뜬다. Any는 Hashable 프로토콜을 준수하지 않아 key 값으로 사용 불가하다눈..
Type 'Any' does not conform to protocol 'Hashable'
2. 딕셔너리 접근
var dict:[String:Any] = ["name":"hongssup", "age":20]
//value 가져오기
let name = dict["name"] //"hongssup"
//getting all values
dict.values //["hongssup", 20]
dict.values.sorted() //정렬
//getting all keys
dict.keys //["age", "name"]
dict.keys.sorted() //정렬
for key in dict.keys { print(key) }
//all key, value
for (key, value) in dict { print("\(key), \(value)") }
3. 딕셔너리 추가
dict["height"] = 170
dict.updateValue(170, forKey: "height")
4. 딕셔너리 삭제
dict["height"] = nil
dict.removeValue(forKey: "height")
//전체삭제
dict.removeAll()
5. 딕셔너리 갯수 확인
dict.count //딕셔너리 갯수 확인 (Int)
dict.isEmpty //딕셔너리 비었는지 확인 (Bool)
6. 배열 안에 딕셔너리 넣기
이 글을 쓰게 된 이유가 이거 때문이다.
배열 안에 딕셔너리를 넣으려고 하는데 계속 에러가 나서 찾아보니 따로 방법이 있더라.
다음과 같이 선언해주면 딕셔너리를 인자로 받을 수 있는 빈 배열을 생성할 수 있다.
var list:Array = [Dictionary<String, Any>]()
var list:Array = [[String:Any]]()
참고 : StackOverflow
딕셔너리 요소 검색하기
딕셔너리 정렬하기
기본적으로 dictionary는 순서가 없는 컬렉션이지만 sorted(by:) 메소드를 이용해 순서를 지정할 수 있다.
딕셔너리의 (key, value)를 tuple 형태로 묶어 정렬된 배열을 반환한다.
- key 기준으로 정렬시 sorted 함수에 {$0.0 < $1.0} 클로저를 전달
- value 기준으로 정렬시 sorted 함수에 {$0.1 < $1.1} 클로저를 전달
var scoreDict: [Int: Int] = [1: 90, 2: 50, 3: 30, 4: 100]
// key 값 기준으로 정렬
let keySortedDict = scoreDict.sorted(by: {$0.0 < $1.0})
print(keySortedDict)
// [(key: 1, value: 90), (key: 2, value: 50), (key: 3, value: 30), (key: 4, value: 100)]
// value 값 기준으로 정렬
let valueSortedDict = scoreDict.sorted(by: {$0.1 < $1.1})
print(valueSortedDict)
// [(key: 3, value: 30), (key: 2, value: 50), (key: 1, value: 90), (key: 4, value: 100)]
7. 딕셔너리 value 수정
문제들을 풀다 보면 이미 key, value 가 있으면 value + 1을 해주고, 없으면 초기화를 먼저 시켜줘야 하는 경우가 많다.
그럴 때, dict[key] != nil 이면 1을 더해주고, 아니면 1로 초기화 해주는 코드로 작성해줘도 되지만,
다음과 같이 더 간단하게 한 줄로 구현이 가능하다.
dict[num, default: 0] += 1
참고 : 소들이_Swift Dictionary,
'Algorithm > 참고' 카테고리의 다른 글
[Swift] 2진수 변환 radix (0) | 2022.02.09 |
---|---|
[Swift] reversed() (1) | 2022.01.16 |
[Swift] String 문자열 다루기 (2) | 2022.01.10 |
[Swift] Array 배열 관련 함수들 (0) | 2022.01.06 |
Swift 정규식 NSRegularExpression (0) | 2022.01.04 |