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)

image

🔶 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

Categories:

Updated:

Leave a comment