Dictionary
Updated:
🔷 Dictionary
-
고유 key 와 그에 대응하는 value 를 연결하여 데이터를 저장하는 자료형입니다 주요 특징은 다음과 같습니다
- 하나의 키는 하나의 데이터에만 연결되어야 합니다 - 하나의 딕셔너리에서 키는 중복될 수 없습니다. 중복해서 선언하면 아이템 추가가 아니라 수정이 이루어져 기존 키에 연결된 데이터가 제거 됩니다 - 저장할 수 있는 데이터 타입에는 제한이 없지만, 하나의 딕셔너리에 저장하는 데이터 타입은 모두 일치 해야 합니다 - 딕셔너리 아이템네는 순서가 없지만 키에는 내부적으로 순서가 있으므로 for ~ in 구문을 이용해 순회 탐색을 할 수 있습니다. - 딕셔너리에서 사용할 수 있는 키의 타입은 거의 제한이 없으나 해시(Hash) 연산이 가능한 타입이어야 합니다
// dictionary
// key : value
// 키 값으로 한쌍인 딕셔너리 - 사물함과 비슷
var myFriends = ["bestFriend" : "Jacob",
"hightSchool" : "Emma"
]
// BF 라는 열쇠로 내용물을 꺼냄
let myBestFriend = myFriends["bestFriend"] // Jacob
let hightSchoolFriend = myFriends["hightSchool"] // Emma
// 데이터가 없기 때문에 nil
let yourtubeFriend = myFriends["youtube"] // nil
// default 값을 설정해서 값이 없을 경우에 설정 가능
let yourtubeFriend2 = myFriends["youtube", default: "noFriend"] // noFriend
// 값 변경 가능
myFriends["bestFriend"] = "개발하는 Jacob"
let myBestFriend2 = myFriends["bestFriend"] // 개발하는 Jacob
// 값 추가 하기
myFriends["newFriend"] = "철수"
let newFriend = myFriends["newFriend"] // 철수
// 값 추가 변경을 updateValue 로 하기
myFriends.updateValue("Mike", forKey: "boyFriend")
let girlFriend = myFriends["boyFriend"] // Mike
// 기존의 값을 변경도 updateValue 로도 가능
myFriends.updateValue("Jack", forKey: "bestFriend")
let myBestFriend3 = myFriends["bestFriend"] // Jack
print(myFriends) // ["newFriend": "철수", "bestFriend": "Jack", "hightSchool": "Emma", "boyFriend": "Mike"]
// 빈 딕셔너리 생성도 가능 (키, 값 자료형)
let emptyDictionary = [String : Int]() // [:]
let myEmptyDic = Dictionary<String, Int>() // [:]
// 갯수
myFriends.count // 4
// 반복
for item in myFriends {
print("item: ",item)
}
/*
item: (key: "newFriend", value: "철수")
item: (key: "bestFriend", value: "Jack")
item: (key: "boyFriend", value: "Mike")
item: (key: "hightSchool", value: "Emma")
*/
🔶 Dictionary 를 이용한 그룹핑
// 커스텀 친구 타입
enum FriendType {
case normal, best
}
// 친구 타입을 맴버 변수로 가지는 친구 struct
struct Friend {
var name: String
var type: FriendType
}
let first = Friend(name: "Jacob", type: .normal)
let second = Friend(name: "Emma", type: .best)
let third = Friend(name: "Hara", type: .best)
let forth = Friend(name: "Suzi", type: .normal)
var friendsList = [first, second, third, forth]
print(friendsList)
// 딕셔너리를 통해 키, 값으로 배열 그룹핑이 가능합니다
// 예) 키 : 친구 타입, 값: value, item
let groupedList = Dictionary(grouping: friendsList) { (friend) -> FriendType in
return friend.type
}
// 아래와 같이 간단하게 표현 가능
let groupedList2 = Dictionary(grouping: friendsList, by: { $0.type })
print(groupedList)
print(groupedList2)
🔶 Dictionary 반복문
// Dictionary 배열
let myFriends = [
"Jacob" :30,
"Emma": 35,
"Mike": 38
]
// Dictionary 배열 반복 처리가 가능합니다
// for (키, 값) in 딕셔너리 배열
for (friend, age) in myFriends {
print("\(friend)의 나이는 \(age) 입니다")
}
/*
Jacob의 나이는 30 입니다
Emma의 나이는 35 입니다
Mike의 나이는 38 입니다
*/
Reference
꼼꼼한 재은 씨의 스위프트 문법편 - https://book.jacobko.info/#/book/1186710233
개발하는 정대리 스위프트 기초 문법 - 14일차 / 딕셔너리 - https://www.youtube.com/watch?v=8nPQKGrpbmY&list=PLgOlaPUIbynoqbQw_erl3L2w7vfOTCtFD&index=14
Leave a comment