[swift] Dictionary, 딕셔너리에 대하여

이은수, Lee EunSoo·2024년 8월 22일
0

Swift Basic

목록 보기
4/24
post-thumbnail

개요

배열은 해쉬 테이블의 일종이다
"A dictionary is a type of hash table"

즉 딕셔너리는 해쉬테이블 처럼 키와 밸류를 갖는 타입이라는 것이다.

딕셔너리는 키를 통해서 접근이 가능하다.
(전체출력은 키없어도 되긴함..)

//타입을 지정하지 않고 데이터를 삽입해서 만든 딕셔너리
let dict01 = [
				1:"minsoo",
                2:"gosoo",
                3:"jinsoo"]
                
//타입을 지정한 빈 딕셔너리
let dict02:[Int:String] = [:] 

//밸류값에 배열을 넣는것도 가능
let dict03:[String:[String]] = [
				"vip":["minsu", "gosoo"],
                "blackList":["jinsoo", "eunsoo"] ]
				

다음과 같이 딕셔너리를 사용할 수 있다.

딕셔너리에서 사용할 수 있는 기능들

접근

딕셔너리에서 접근은 키값을 통해서만 접근이 가능하다,
딕셔너리는 순서를 갖지 않기에 인덱스값으로 접근이 불가능하다.
(그래서 딕셔너리를 출력하면 그때마다 다른 순서로 출력된다.)

그렇다면 출력은 어떻게 해야 될까?

print(dict01)

출력값: [3: "jinsoo", 2: "gosoo", 1: "minsoo"]

print(dict01[1])

출력: Optional("minsu")

왜 옵셔널로 결과가 나오지???

딕셔너리는 키값이 존재하지 않는 경우에도 오류는 내지 않는다.
존재하지 않는 키를 입력해서 접근하면 nil을 반환한다.

반복문으로 출력하기

for (num, name) in dict01 {
    print("member '\(name)' number is '\(num)'.")
}


member 'gosoo' number is '2'.
member 'minsoo' number is '1'.
member 'jinsoo' number is '3'.

key나 value만 따로 출력

for key in dict01.keys {
    print(key)
}

<결과>
1
2
3


for val in dict01.values {
    print(val)
}

<결과>
minsoo
jinsoo
gosoo

for문을 사용하면

key값으로 접근

이 경우 옵셔널에 신경써서 접근해야 한다.

for i in 1...3 {
    if let value = dict01[i] {
        print("Key: \(i), Value: \(value)")
    } else {
        print("Key: \(i) does not exist in the dictionary")
    }
}

1...3 범위 지정이 애매하다면 키값만 존재하는 배열을 만들어서 접근하는것도 하나의 방법이 되겠다.

let keyArr:[Int] = [1,2,3]

for i in keyArr{
    if let value = dict01[i] {
        print("Key: \(i), Value: \(value)")
    } else {
        print("Key: \(i) does not exist in the dictionary")
    }
}

정렬

var interestingNumbers = ["primes": [2, 3, 5, 7, 11, 13, 17],
                          "triangular": [1, 3, 6, 10, 15, 21, 28],
                          "hexagonal": [1, 6, 15, 28, 45, 66, 91]]
                          
for key in interestingNumbers.keys {
    interestingNumbers[key]?.sort(by: >)
}

다음과 같이 정렬이 가능하다.

profile
iOS 개발자 취준생, 천 리 길도 한 걸음부터

0개의 댓글