[Swift5] Collection Types 3

Junyoung Park·2022년 2월 19일
0

Swift5 Docs

목록 보기
9/37
post-thumbnail
  • 다음은 Swift 5.6 Doc의 Collection Types 공부 내용을 정리했음을 밝힙니다.

Collection Types

딕셔너리

딕셔너리는 같은 타입의 키를 통해 같은 타입의 값을 저장하는 컬렉션으로 정해진 순서가 없이 저장된다. 이때 각 값은 유니크한 키를 통해 조회할 수 있다.

단축어

딕셔너리 선언은 Dictionary<Key, Value>가 정식 선언이지만 [Key: Value] 단축어로도 가능하다.

빈 딕셔너리 생성

var dict_int_str :[Int : String] = [:]를 통해 빈 딕셔너리를 선언할 수 있다. [Int : String]이라는 정보를 직접적으로 줄 필요 없이 문맥을 통해 추론할 수 있다면, 다시 그 타입의 빈 배열로 선언할 수 있다.

dict_int_str[1] = "One"
// 1 : One
dict_int_str = [:]
// empty dict

리터럴로 딕셔너리 생성

[키:값] 쌍을 통해 딕셔너리에 리터럴로 값을 넘겨줄 수 있다.

var dict_int_str: [Int : String] = [1:"One", 2:"Two", 3:"Three"]

딕셔너리를 선언할 때 값을 추론할 수 있다면 [Int : String]과 같이 직접적인 정보를 줄 필요 없다. 키와 값은 각각 같은 타입의 데이터이기 때문이다.

딕셔너리 접근 및 수정

딕셔너리 메소드와 프로퍼티, 서브스크립트 문법을 통해 딕셔너리 값 조회 및 수정이 가능하다.

  • Dictionary.count 프로퍼티는 아이템의 개수를 반환한다.

  • Dictionary.isEmpty 프로퍼티는 count 프로퍼티가 0과 같은지, 즉 아이템이 없는지 확인한다. 비었다면 True, 아이템이 있다면 False를 return.

  • 서브스크립트를 통해 새로운 키를 선언, 딕셔너리에 값을 추가할 수 있다.

dict_int_str[4] = "four"
// dict_int_str: [1:"One", 2:"Two", 3:"Three", 4:"four"]
  • 기존의 값을 수정할 수도 있다.
dict_int_str[4] = "Four"
// dict_int_str: [1:"One", 2:"Two", 3:"Three", 4:"Four"]
  • Dictionary.updateValue(_:forKey:) 메소드는 서브스크립트 문법 대신 딕셔너리 내부에 값을 넣거나 수정할 수 있다. 서브스크립트 문법과 달리 업데이트하기 전 키에 해당하는 값을 반환하기 때문에 주의해야 한다.
if let old_val = dict_int_str.updateValue("one", forKey:1){
	print("\(old_val)")
}
// One printed
// dict_int_str: [1:"one", 2:"Two", 3:"Three", 4:"Four"]

서브스크립트 문법을 활용해 Dictionary.updateValue와 같은 기능을 구현해보자.

if let let old_val = dict_int_str[1]{
	print("\(old_val)")
    // one printed
} else {
	print("this int is not stored")
}
dict_int_str[1] = "One"
// dict_int_str: [1:"One", 2:"Two", 3:"Three", 4:"Four"]

딕셔너리 키는 값이 없을 수 있기 때문에 옵셔널이 반환된다. if let =으로 옵셔널을 받고 값을 확인하자.

  • 서브스크립트 문법으로 nil을 주면 곧 키에 해당하는 값을 삭제하는 기능이다.
dict_int_str[4] = nil
// dict_int_str: [1:"One", 2:"Two", 3:"Three"]
  • Dictionary.removeValue(forKey:) 메소드를 통해 값이 있다면 반환한 후 삭제, 없다면 nil을 반환한 후 삭제한다.
if let old_val = dict_int_str.removeValue(forKey:3){
	print("\(old_val)")
} else {
	print(this int is not stored"
}
// Three printed
// dict_int_str: [1:"One", 2:"Two"]

반복문으로 접근하기

for-in 루트문을 통해 키-값 쌍을 사용하자. 딕셔너리의 아이템은 (key, value) 튜플 형태로 반환되기 때문에, 언패킹한 후 반복문에 사용할 임시 상수/변수로 사용하자.

for (int_key, str_val) in dict_int_str {
	print("\(int_key): \(str_val)")
}
// 1: One
// 2: Two

Dictionary.keys 또는 Dictionary.values 프로퍼티를 통해 따로 접근할 수도 있다. 이를 활용해 키 또는 값만 따로 배열로 만들 수도 있다.

let int_keys = [Int](dict_int_str.keys)
// int_keys: [1, 2]
let str_vals = [String](dict_int_str.values)
// str_vals: ["One", "Two"]

키 또는 값을 정렬해 사용할 때에는 프로퍼티에 sorted() 메소드를 적용하자.

profile
JUST DO IT

0개의 댓글