본문 바로가기
iOS/Swift 문법 심화 학습

Dictionary

by 황민우 2022. 4. 19.

정의

- 요소가 키-값(Key-Value) 쌍인 컬렉션입니다.

 

 

개요

- Dictionary는 포함된 항목에 대해 빠른 액세스를 제공하는 일종의 해시 테이블입니다.
- 각 항목은 문자열이나 숫자와 같은 Hash가능한 유형인 키를 사용하여 식별합니다.
- 또한, 해당 키를 사용하여 모든 개체가 될 수 있는 해당 값을 검색합니다.

 

 

제약 조건

- 데이터를 키-값 쌍의 형태로 저장하고 관리합니다.
- 배열과 비슷한 목적의 작업을 하지만 순서가 없습니다.
- Dictionary에 저장된 각 항목은 값을 참조하고 접근하는 데 사용되는 유일한 키와 연결되어 있습니다.
- Dictionary의 키는 해시 가능한 타입이어야 합니다.
(Swift의 기본 타입(String, Int, Double, Bool, 등,,)은 해시 가능.)
- Optional, Array, Set도 키로 사용할 수 있습니다.


실습

 

예제 1 : Swift에서 Dictionary는 Generic 구조체

var x = [Int:String]()
var y : Dictionary<String,String> = [:]

var a1 : [Int:String] = [1:"일", 2:"이", 3:"삼"]
var a2 : Dictionary<Int,String> = [1:"일", 2:"이", 3:"삼"]
var a3 = [1:"일", 2:"이", 3:"삼"]

var b1 : [String:Double] = ["김보통":60.5,"이갈비":42.7,"엄청군":123.4]
var b2 : Dictionary<String,Double> = ["김보통":60.5,"이갈비":42.7,"엄청군":123.4]
var b3 = ["김보통":60.5,"이갈비":42.7,"엄청군":123.4]

let colors = ["빨강":"red", "초록":"green", "파랑":"blue"]

 

 

예제 2 : Dictionary의 자료형

Dictionary <Int, String>

var a1 : [Int:String] = [1:"일", 2:"이", 3:"삼"]
var a2 : Dictionary<Int,String> = [1:"일", 2:"이", 3:"삼"]
var a3 = [1:"일", 2:"이", 3:"삼"]
print(type(of:a1)) 
print(type(of:a2)) 
print(type(of:a3))

실행결과
//Dictionary<Int, String>
//Dictionary<Int, String>
//Dictionary<Int, String>

 

Dictionary <String, Double>

var b1 : [String:Double] = ["김보통":60.5,"이갈비":42.7,"엄청군":123.4]
var b2 : Dictionary<String,Double> = ["김보통":60.5,"이갈비":42.7,"엄청군":123.4]
var b3 = ["김보통":60.5,"이갈비":42.7,"엄청군":123.4]
print(type(of:b1))
print(type(of:b2))
print(type(of:b3))

실행결과
//Dictionary<String, Double>
//Dictionary<String, Double>
//Dictionary<String, Double>

 

Dictionary <String, String>

let colors = ["빨강":"red", "초록":"green", "파랑":"blue"]
print(type(of:colors))

 

 

예제 3 : Dictionary 항목 접근/변경

Dictionary <Int, String>

var number : [Int:String] = [1:"일", 2:"이", 3:"삼"]
print(number)					// [1: "일", 2: "이", 3: "삼"]
print(number.count) 				// 3
print(number[1],number[2],number[3])		// Optional("일") Optional("이") Optional("삼")
print(number[1]!,number[2]!,number[3]!)		// 일 이 삼
print(number[0])				// nil

number[0] = "영"
print(number)					// [0: "영", 1: "일", 3: "삼", 2: "이"]
number[4] = "사"
print(number)					// [0: "영", 1: "일", 3: "삼", 2: "이", 4: "사"]
number.updateValue("둘",forKey:2 ) 
print(number)					// [0: "영", 1: "일", 3: "삼", 2: "둘", 4: "사"]


실행결과
// [1: "일", 2: "이", 3: "삼"]
// 3
// Optional("일") Optional("이") Optional("삼")
// 일 이 삼
// nil
// [0: "영", 1: "일", 3: "삼", 2: "이"]
// [0: "영", 1: "일", 3: "삼", 2: "이", 4: "사"]
// [0: "영", 1: "일", 3: "삼", 2: "둘", 4: "사"]

 

Dictionary <String, String>

 

var colors = ["빨강":"red", "초록":"green", "파랑":"blue"]
print(colors)						// ["파랑": "blue", "빨강": "red", "초록": "green"]
print(colors.count) 					// 3
print(colors["빨강"],colors["초록"],colors["파랑"])	// Optional("red") Optional("green") Optional("blue")
print(colors["빨강"]!,colors["초록"]!,colors["파랑"]!)	// red green blue
print(colors["검정"])					// nil

colors["검정"] = "black"
print(colors)						// ["검정": "black", "파랑": "blue", "빨강": "red", "초록": "green"]
colors["보라"] = "Purple"
print(colors)						// ["보라": "Purple", "검정": "black", "파랑": "blue", "빨강": "red", "초록": "green"]
colors.updateValue("Green",forKey:"초록" ) 
print(colors)						// ["보라": "Purple", "검정": "black", "파랑": "blue", "빨강": "red", "초록": "Green"]


실행결과
// ["파랑": "blue", "빨강": "red", "초록": "green"]
// 3
// Optional("red") Optional("green") Optional("blue")
// red green blue
// nil
// ["검정": "black", "파랑": "blue", "빨강": "red", "초록": "green"]
// ["보라": "Purple", "검정": "black", "파랑": "blue", "빨강": "red", "초록": "green"]
// ["보라": "Purple", "검정": "black", "파랑": "blue", "빨강": "red", "초록": "Green"]

내용 출처

https://developer.apple.com/documentation/swift/dictionary

 

Apple Developer Documentation

 

developer.apple.com

https://www.youtube.com/watch?v=oTe5i1ZuzXM 

 

'iOS > Swift 문법 심화 학습' 카테고리의 다른 글

Optional  (0) 2022.04.12
컬렉션 타입 [Collection Types]  (0) 2022.02.17
서브스크립트 [ Subscript ]  (0) 2022.02.15
프로퍼티 [ Properties ]  (0) 2022.02.14
옵셔널 체이닝 [ Optional Chaining ]  (0) 2022.02.10

댓글