[컬렉션] - 딕셔너리(Dictionary)

썹스·2022년 12월 23일
0

Swift 문법

목록 보기
10/68

딕셔너리(Dictionary)

딕셔너리(Dictionary)는 키값(key)과 벨류값(value)을 쌍으로 갖는 컬렉션 타입입니다.

딕셔너리 내부의 키값은 고유한(유일한) 값을 가져야 하지만, 벨류값은 중복을 허용하고 있습니다.

딕셔너리는 고유한 키값을 가지고 있기 때문에 순서를 고려하지 않습니다.

딕셔너리의 키값은 Hashble한 타입을 사용해야 합니다. Swift의 기본 타입(String, Int, Double, Bool 등)은 Hashble 가능하므로 Dictionary의 key로 사용할 수 있습니다.
(Hashble한 타입: 값의 고정된 길이와 유일성을 보장해주는 타입)


📌 딕셔너리 만들기

딕셔너리에는 두 개의 값이 존재하며 각각의 위치가 정해져 있습니다. 키값(key)은 왼쪽 그리고 데이터값(value)은 오른쪽에 정의합니다.

딕셔너리를 만드는 대표적인 방법으로는 세 가지가 존재합니다.

✅ 빈 딕셔너리 만들기

// [키:벨류]
var dic1 = [Int: String]()
var dic2: Dictionary<Int, String> = [:]
var dic3 = Dictionary<Int, String>()

✅ 초기값이 있는 딕셔너리 만들기

var dic1 : [Int:String] = [1:"일", 2:"이", 3:"삼"]
var dic2 : Dictionary<Int, String> = [1:"일", 2:"이", 3:"삼"]
var dic3 = [1:"일", 2:"이", 3:"삼"]

📌 딕셔너리에 데이터 추가하기

데이터를 추가할 때는 updateValue(<벨류값>, forKey:<키값>)를 사용합니다.

딕셔너리에는 중간에 데이터를 추가하는 메서드가 존재하지 않습니다.(순서를 고려하지 않기 때문) 그 때문에 데이터를 추가하는 메서드는 updateValue() 하나뿐입니다.

✅ 딕셔너리에 데이터 추가

dic.updateValue(2, forKey:"일")

📌 딕셔너리에 데이터 삭제하기

딕셔너리에 데이터를 삭제하는 방법은 크게 두 가지가 존재합니다. (순서를 고려하지 않기 때문에 삭제 메서드가 적습니다.)

✅ 딕셔너리에 데이터 삭제

dic.removeValue(forKey: 키값)  // 키값을 기준으로 데이터 삭제

✅ 딕셔너리의 모든 데이터 삭제

dic.removeAll() 

📌 딕셔너리의 데이터 접근 및 추출

딕셔너리에서 특정 데이터를 추출할 때는 dic[keyValue] 방식으로 접근할 수 있습니다.
(value를 활용하여 key값을 접근할 수는 없습니다.)

딕셔너리의 모든 키값을 추출하고 싶을 때는 .keys 속성을 사용합니다.

딕셔너리의 모든 값(value)을 추출하고 싶을 때는 .values 속성을 사용합니다.

✅ 딕셔너리의 모든 key값 추출

dic.keys

✅ 딕셔너리의 모든 value값 추출

dic.values

📌 딕셔너리의 데이터 정렬

딕셔너리에서 원본값을 변경하는 정렬은 없으며, key값 또는 value값을 나누어 정렬해야 합니다. (동시 비교는 불가능하지만, 키값을 기준으로 정렬한 뒤 value값과 같이 반환하는 방법은 있습니다.)

✅ key값을 기준으로 정렬

dic.keys.sorted()       // 오름차순
dic.keys.sorted(by: <)  // 오름차순
dic.keys.sorted(by: >)  // 내림차순

✅ value값을 기준으로 정렬

dic.values.sorted()       // 오름차순
dic.values.sorted(by: <)  // 오름차순
dic.values.sorted(by: >)  // 내림차순

✅ key값을 기준으로 정렬 (value값과 같이 반환)

dic.sorted(by: <)  // 오름차순 
dic.sorted(by: >)  // 내림차순

📌 딕셔너리의 최대/최소값 데이터

딕셔너리에 할당된 데이터의 최대/최소값을 알고 싶을 때는 max(), min() 메서드를 사용합니다.

딕셔너리의 최대/최소값 메서드를 사용하면 반환 값을 Optional(옵셔널) 타입으로 받게 됩니다. 이는 빈 딕셔너리의 가능성 때문입니다. (빈 딕셔너리에 max(), min() 메서드를 사용하면 nil이 출력)

문자(Character), 문자열(String)이 할당된 딕셔너리의 경우에는 유니코드 값을 기준으로 최대/최소값이 반환됩니다.

✅ key값 기준의 최대/최소값

dic.keys.min()    // key값의 최소값
dic.keys.max()    // key값의 최대값

✅ value값 기준의 최대/최소값

dic.values.min()  // value값의 최소값
dic.values.max()  // value값의 최대값

✅ key값을 기준의 최대/최소값 (value값과 같이 반환)

dic.max(by: <)  // 키값 기준 최대값
dic.max(by: >)  // 키값 기준 최소값

dic.min(by: <)  // 키값 기준 최소값
dic.min(by: >)  // 키값 기준 최대값

📌 그 외 딕셔너리의 기타 기능

✅ 딕셔너리의 데이터 수를 반환

dic.count      // 딕셔너리의 데이터 수를 return

✅ 딕셔너리에 데이터 여부 확인

dic.isEmpty    // 딕셔너리안에 데이터가 없으면 true, 있으면 false return

이 외에도 딕셔너리에서 사용 가능한 메서드 및 기능들이 많이 있습니다.

profile
응애 나 코린이(비트코인X 코딩O)

0개의 댓글