본문 바로가기

스위프트(Swift)

스위프트(Swift) - 컬렉션 타입 딕셔너리(Dictionary)

반응형

스위프트 데이터 타입 딕셔너리

스위프트에서 컬렉션 타입인 딕셔너리를 살펴보겠습니다. 딕셔너리는 키와 값으로 이루어진 하나의 쌍을 값으로 저장합니다. 즉, 묶음으로 이루어진 한 쌍이 딕셔너리의 값이 되는 것입니다.

 

하나의 딕셔너리 안에 키는 중복될 수 없지만, 값을 중복이 가능합니다. 예를 들어 나와 친구들의 키는 같을 수 있지만, 나와 친구들 자체가 같을 수는 없는 것과 동일한 이치입니다.

 

1. 딕셔너리(Dictionary) 생성

var weightOfperson: Dictionary<String, Int> = Dictionary<String, Int>()
// 키가 String, 값이 Int인 타입의 딕셔너리를 이니셜라이저를 통해 생성합니다.

var ageOfperson: [String: Int] = [:]
// 키가 String, 값이 Int 타입임을 [:]안에 명시하면 딕셔너리를 의미합니다. 뒤에 [:]는 이니셜라이저를 간단하게 표현합니다.

var tallOfperson: [String: Int] = ["Kim": 180, "Lee": 175, "Park": 172]
// 딕셔너리를 생성함과 동시에 여러 쌍의 값으로 초기화할 수 있습니다.

 

2. 딕셔너리(Dictionary) 기본 프로퍼티

print(tallOfperson["Kim"])
// 키의 값을 입력하면 값에 해당하는 결과를 얻을 수 있습니다. 키가 존재하지 않으면 nil을 반환합니다.

tallOfperson["Choi"] = 185
print(tallOfperson["Choi"])
// 임의의 키 값을 넣고 해당하는 값으로 입력해주면 딕셔너리에 추가됩니다.

print(tallOfperson.removeValue(forKey: "Kim"))
// removeValue 프로퍼티에 키를 전달함으로써 해당 값을 삭제할 수 있습니다. 반환 값을 해당 키에 대한 값입니다.

print(tallOfperson["Kim", default: 180])
// Kim의 값을 출력하되, 없다면 180을 출력하라는 의미입니다.

print(tallOfperson.isEmpty)
print(ageOfperson.isEmpty)
// 딕셔너리 안의 값이 존재하는지 여부를 판단할 수 있습니다.

print(tallOfperson.count)
// 현재 딕셔너리 안의 몇 쌍의 값이 존재하는지 확인할 수 있습니다.

 

3. 딕셔너리(Dictionary) 일대다 대응

var companyThings = ["Apple": ["iPhone", "iPad", "AirPod"],
                              "samsung": ["Galaxy", "Galaxy Note"],
                              "LG": ["G","V"]]
// 하나의 키에 여러 가지 값을 대응시킬 수 있습니다. Apple은 여러 가지의 제품을 가지고 있습니다.

print(companyThings["Apple"]!)
// ["iPhone", "iPad", "AirPod"] 를 출력합니다.

 

4. 딕셔너리(Dictionary) 활용

let mainThings = ["Apple": "iPhone",
                         "samsung": "Galaxy", 
                         "Microsoft": "Windows"]

for (main, company) in mainThings {
    print("'\(main)' make '\(company)'.")
}
// 순서가 의미없는 딕셔너리를 위와 같이 출력하면, 키-값 쌍을 튜플의 요소로 반환해서 출력합니다.

let findCompany = mainThings.firstIndex(where:{ $0.value.hasPrefix("iPhone")})
// 'mainThings' 딕셔너리에서 'iPhone'을 가진, 가장 앞에 대응되는 딕셔너리 값을 찾는다.

if let index = findCompany{ // 찾은 딕셔너리의 값이 존재한다면(할당할 수 있다면)
                                        print("The '\(mainThings[index].key)' make iPhone")
                                     }
// if let을 통해 값의 존재유무를 확인하기에 안전성을 준다. 또 옵셔널 변수의 값이 할당된다.
else
         print("who makes iPhone")
       }

 

반응형