티스토리 뷰

반응형

안녕하세요 :) 오늘은 Dictionary에 대해서 알아볼거에요 


Dictionary는 key와 value로 데이터를 저장하는 컨테이너입니다. 

각각의 value는 유일한 키 값에 물려있으며, key값은 Dictionary안에서 value를 찾기 위하 식별자역할을 합니다.

여기에서도 언급했듯이, Dictionary에는 순서가 없습니다. key값으로 value를 찾기때문에 순서가 의미없는 것이죠.

Swift에서 Dictionary는 Dictionary<KeyType, ValueType>형태로 쓰입니다. 

유일한 제약사항이 하나 있는데, 반드시 KeyType은 해쉬가능한 타입어야합니다.(Hashable) 

즉, 그 자체로 유일하게 표현이 가능한 방법을 제공해야 합니다

스위프트의 기본 타입(String, Int, Double..등)은 기본적으로 해쉬가능한 것들이므로 Dictionary의 KeyType으로 사용가능합니다 .

또한, Swift의 열거형, 즉 enum역시 해쉬가능하므로 들어갈 수 있습니다. 


바로 시작하겠습니다. 



Dictionary(사전)







1. Dictionary생성하는 방법


KeyType이 Int고, ValueType이 String인 Dictionary를 생성하는 방법입니다. 

var dic : [Int : String] = [:]

var dic2 = [Int : String]()

var dic3 : Dictionary = [Int:String]()

var dic4 : Dictionary<Int, String> = Dictionary<Int, String>()




2. Dictionary 생성과 동시에 초기화

var dic : [Int : String] = [1:"zedd", 2:"swift", 3:"iOS"]

var dic2 = [1:"zedd", 2:"swift", 3:"iOS"]//타입유추. [Int:String] Dictionary구나

var dic3 : Dictionary = [1:"zedd", 2:"swift", 3:"iOS"]

var dic4 : Dictionary<Int, String> = [1:"zedd", 2:"swift", 3:"iOS"]

//모두 [1:"zedd", 2:"swift", 3:"iOS"] 넣었지만, 출력이 이순서대로 된다고 보장할 없다. Dictionary 순서가 없기때문


3. Dictionary값 수정

(이제 메소드를 사용하고 나서의 Dictionary안의 값들이 어떻게 변했는지 보여드릴텐데요, 임의로 Key순서대로 나타내도록 하겠습니다.

다시한번 말씀드리지만, Dictionary안의 순서는 의미가 없습니다. 실제로 Print해보시면 순서가 뒤죽박죽인 것을 볼 수 있을거에요.)


var dic : [Int : String] = [1:"zedd", 2:"swift", 3:"iOS"]

dic.updateValue("fun", forKey: 3)

print(dic)//[1:"zedd", 2:"swift", 3:"fun"]

dic[3] = "iOS"

print(dic)//[1:"zedd", 2:"swift", 3:"iOS"]



4. Dictionary에 값 추가

var dic : [Int : String] = [1:"zedd", 2:"swift", 3:"iOS"]

dic.updateValue("fun", forKey: 4 )//주의 : updateValue Optional값을 반환함

print(dic)//[1:"zedd", 2:"swift", 3:"iOS", 4:"fun"]

dic[5] = "Hello"

print(dic)//[1:"zedd", 2:"swift", 3:"iOS", 4:"fun", 5:"Hello"]





5. Dictionary에 값 접근 

var dic : [Int : String] = [1:"zedd", 2:"swift", 3:"iOS"]

print(dic[1]!)//zedd

print(dic[2]!)//swift

print(dic[3]!)//iOS

var dic2 : [String : Int] = ["zedd":30, "swift":40,"iOS":50]

print(dic2["zedd"]!)//30

print(dic2["swift"]!)//40

print(dic2["iOS"]!)//50

//key 값으로 접근이 가능


var dic3 : [String : String] = ["zedd":"30", "swift":"40","iOS":"50"]

print(dic3["30"]) //nil. "30" Value 가지는 쌍은 있지만, "30" Key 가지는 쌍이 없기때문

//무조건 Key값으로 접근해야 Value 얻어올 있음.



6. Dictionary로 for문 도는법

dic = [1:"zedd", 2:"swift", 3:"iOS", 4:"fun", 5:"Hello"]

for (key,value) in dic{

    print(key) //1 2 3 4 5

}

for (key,value) in dic{

    print(value)// zedd swift iOS fun Hello

}

for (key,value) in dic{

    print("\(key):\(value)") // 1:zedd 2:swift 3:iOS 4:fun 5:Hello

}

//for 결과 역시 원래는 순서가 뒤죽박죽입니다.



7. Dictionary 값 삭제.

dic = [1:"zedd", 2:"swift", 3:"iOS", 4:"fun", 5:"Hello"]

dic.removeValue(forKey: 5)

print(dic)//[1:"zedd", 2:"swift", 3:"iOS", 4:"fun"]

dic.removeAll()//Dictionary 모든 Key Value 삭제

print(dic) //[:]

dic = ["zedd": 1] //error! [Int:String]타입의 Dictionary였으므로. 타입을 바꿔줄 수 없다.








반응형