딕셔너리(Dictionary)

2022년 09월 25일

TOC

Swift

Swift가 제공하는 컬렉션 타입 중 key와 value로 묶어서 구성할 수 있는 딕셔너리와, typealias, for in, sorted 등의 메서드 활용하기

딕셔너리(Dictionary) 사용

딕셔너리 는 컬렉션 타입으로, 키와 값 쌍으로 구성된다. 딕셔너리 안에는 키가 하나이거나 여러 개일 수 있다. Dictionary 키워드를 키의 타입과 값의 타입 이름의 조합으로 써서 생성한다.

// 기본적인 빈 딕셔너리 생성 (Int)
// var을 사용하여 딕셔너리가 변경 가능하게 하거나, let을 사용하여 변경 불가능한 딕셔너리로 생성
var userList: Dictionary<String, Int> = Dictionary<String, Int>()
let userList: Dictionary<String, Int> = Dictionary<String, Int>()

// 다음과 같이 초깃값을 부여할 수 있음
let userList: Dictionary<String, Int>
    = ["user1": 1, "user2": 2,"user3": 3]

// 다음과 같이 작성도 가능
let userList: [String: Int]
    = ["user1": 1, "user2": 2,"user3": 3]

print(userList["user1"]) // 결과 : Optional(1)
print(userList.count) // 결과 : 3

typealias라는 별칭 키워드는 이미 존재하는 데이터 타입에 임의로 다른 이름을 부여하여 사용할 수 있게 해준다.

이 기능을 사용하여 보다 간결하게 딕셔너리를 생성할 수 있다.

// 이미 존재하는 데이터 타입에 임의로 다른 이름을 부여
typealias StringDict = [String: Int]

// 빈 딕셔너리 생성
var userList: StringDict = [:]
// 딕셔너리 초깃값 부여
var userList: StringDict = ["user1": 1, "user2": 2,"user3": 3]

print(userList["user1"]) // 결과 : Optional(1)

딕셔너리의 키는 각각의 값에 접근할 수 있게 도와준다. 딕셔너리 내부에서 키는 유일해야 하며, 값은 유일하지 않다.

만약 딕셔너리 내부에 존재하지 않는 키로 접근하게 되면 nil을 출력하게 된다.

typealias MyDict = [String: Int]
var userList: MyDict = ["user1": 1, "user2": 2,"user3": 3]

// user1 값 수정
userList["user1"] = 77
// user2 값 삭제
userList.removeValue(forKey: "user2")

print(userList) // 결과 : ["user3": 3, "user1": 77]
print(userList["user2"]) // 결과 : nil

반복, 조건, 정렬을 사용하여 응용해보기

딕셔너리를 for in으로 반복시키고, 조건문을 작성하여 알맞게 값이 출력될 수 있게끔 만들어 보았다.

딕셔너리에 user를 key, 해당 user의 시험 점수를 value로 하여 시험 성적표를 담았다.

그리고 이 딕셔너리에서 시험 점수가 80점이 넘는 user만 출력시켰다.

typealias MyDict = [String: Int]

var examScore: MyDict = [
    "user1": 53,
    "user2": 81,
    "user3": 84,
    "user4": 96,
    "user5": 95,
    "user6": 49,
    "user7": 77,
    "user8": 32,
    "user9": 76,
    "user10": 72
]

for result in examScore {
    if(result.value > 80) {
        print("\(result.key)의 점수는 \(result.value)")
    }
}

dict1

결과에서 볼 수 있듯이 딕셔너리는 요소들이 순서 없이 구성되기 때문에 코드와 무관하게, 값의 크고 작은 순 없이 순서가 무작위로 출력되는 것을 볼 수 있다.

그렇다면 이를 정렬하려면 어떤 방법이 필요할까?

sorted를 활용하면 원하는 대로 나열할 수 있다.

typealias MyDict = [String: Int]

var examScore: MyDict = [
    "user1": 53,
    "user2": 81,
    "user3": 84,
    "user4": 96,
    "user5": 95,
    "user6": 49,
    "user7": 77,
    "user8": 32,
    "user9": 76,
    "user10": 72
]

let sortedDict = examScore.sorted { (first, second) in
    return first.value > second.value
}

for result in sortedDict {
    print("\(result.key)의 점수는 \(result.value)")
}

dict2

사본 sortedDict를 만들고 sorted를 value가 높은 순서대로 정렬하게끔 사용하였다.

원본 딕셔너리의 무작위 순서가 아닌 정렬된 결과를 얻었고, 그 결과를 반복문과 print()를 사용하여 최종적으로 나타냈다.


Reference

스위프트 프로그래밍(3판)

스위프트 딕셔너리 정렬, Swift Dictionary sorted() - SeriOSly

Written by

yhuj79

🌱 Junior Developer