[Programming Language]/[Swift]

[Swift] 딕셔너리(Dictionary), 선언, count, isEmpty, 추가, 수정, 삭제, for ~ in, keys, values

Semincolon 2024. 7. 7. 09:04

1. 딕셔너리 (Dictionary)

딕셔너리(Dictionary)는 집합과 동일하게 순서를 갖지 않는 콜렉션이다. 이는 키(key), 값(value) 쌍으로 이뤄지고 딕셔너리 내에 키 값은 고유하다.

1-1. 딕셔너리 선언(생성)

  • var myDict1 = [타입: 타입]( )
  • var myDict2 = [key1: value1, key2: value2, key3: value3...]
  • var myDict3: Dictionary<타입, 타입> = [:]
  • var myDict4: [타입: 타입] = [:]
  • var myDict5 = Dictionary<타입, 타입>( )
let myDict1 = [String: String]()
let myDict2 = ["name": "Semin", "location": "Won-Ju"]
let myDict3: Dictionary<String, Bool> = [:]
let myDict4: [String: Int] = [:]
let myDict5 = Dictionary<String, Character>()

print(type(of: myDict1), myDict1) // Dictionary<String, String> [:]
print(type(of: myDict2), myDict2) // Dictionary<String, String> ["name": "Semin", "location": "Won-Ju"]
print(type(of: myDict3), myDict3) // Dictionary<String, Bool> [:]
print(type(of: myDict4), myDict4) // Dictionary<String, Int> [:]
print(type(of: myDict5), myDict5) // Dictionary<String, Character> [:]

위 방법을 사용하여 딕셔너리를 선언할 수 있다. 이중 myDict1, myDict2를 선언하는 방법이 제일 많이 사용된다. 비어있는 배열, 집합은 []를 사용하여 나타냈지만 비어있는 딕셔너리[:]를 사용하여 나타낼 수 있다.

1-2. count

배열, 집합과 동일하게 요소의 개수를 반환한다.

let myDict1 = [String: Int]()
let myDict2 = ["age": 25, "height": 175]

print(myDict1, myDict1.count) // [:] 0
print(myDict2, myDict2.count) // ["age": 25, "height": 175] 2

1-3. isEmpty

이것도 배열, 집합과 마찬가지로 딕셔너리가 비어있으면 true, 그렇지 않으면 false를 반환한다.

let myDict1 = [String: Int]()
let myDict2 = ["age": 25, "height": 175]

print(myDict1.isEmpty) // true
print(myDict2.isEmpty) // false

1-4. 요소 추가 및 수정

1-4-1. 키 값을 사용하여 추가 및 수정

  • 딕셔너리[key] = value

위 형태를 사용하여 딕셔너리에 값을 추가할 수 있다. 만약 이미 존재하는 키 값이라면 기존의 value 값이 새로운 값으로 갱신된다.

var myDict = ["age": 25, "height": 175]

myDict["weight"] = 75 // 새로운 값 추가
print(myDict) // ["age": 25, "height": 175, "weight": 75]

myDict["age"] = 26 // 기존 값 갱신
print(myDict) // ["age": 26, "height": 175, "weight": 75]

1-4-2. updateValue(_, forKey: ) 메서드를 사용하여 추가 및 수정

  • 딕셔너리.updateValue(value, forKey: key)

updateValue 메서드는 딕셔너리에 기존 키값이 존재하면 그에 대응되는 값을 수정하고, 존재하지 않다면 새로운 값을 추가한다. value는 추가할 값을 뜻하고 key는 키값을 뜻한다. 또한 이 메서드는 수정 전의 값을 반환하는데 만약 키가 존재하지 않아 새로운 값이 추가되는 경우에는 nil 값이 반환된다. 이처럼 nil 값이 반환될 수 있으므로 이는 Optional 타입의 값을 반환한다.

var myDict = ["age": 25, "height": 175]

print(myDict.updateValue(75, forKey: "weight")) // nil
print(myDict) // ["age": 25, "height": 175, "weight": 75
print()

print(myDict.updateValue(26, forKey: "age")) // Optional(25)
print(myDict) // ["age": 26, "height": 175, "weight": 75

1-5. 요소 삭제

1-5-1. removeValue(forKey: ) 메서드를 사용하여 삭제

removeValue 메서드도 updateValue 메서드와 동일하게 키에 대응되는 값이 존재하면 삭제를 하고 삭제한 값을 Optional 타입으로 반환하고, 존재하지 않는다면 nil 값을 반환한다.

var myDict = ["age": 25, "height": 175]

print(myDict.removeValue(forKey: "age")) // Optional(25)
print(myDict) // ["height": 175]

print(myDict.removeValue(forKey: "age")) // nil
print(myDict) // ["height": 175]

1-5-2. nil 값을 사용하여 삭제

특정 key에 대응되는 값에 nil을 저장하면 해당 값이 삭제된다.

var myDict = ["age": 25, "height": 175]

myDict["height"] = nil // "height": 175 삭제
print(myDict) // ["age": 25]

1-5-3. removeAll() 메서드를 사용하여 삭제

이 메서드를 사용하면 딕셔너리 요소 전체를 삭제할 수 있다.

var myDict = ["age": 25, "height": 175]

myDict.removeAll()
print(myDict) // [:]

1-5-4. [:]를 사용하여 빈 딕셔너리로 초기화

앞서 빈 딕셔너리는 [:] 형태로 나타낸다 하였는데 이를 사용하면 기존 딕셔너리를 빈 딕셔너리로 초기화할 수 있다.

var myDict = ["age": 25, "height": 175]

myDict = [:]
print(myDict) // [:]

1-6. for ~ in

배열(Array), 집합(Set)과 동일하게 딕셔너리도 for ~ in 반복문을 사용하여 요소 전체에 접근할 수 있다. 이때 반복 변수는 (key, value) 형태의 튜플로 사용해야 한다.

var myDict = ["age": 25, "height": 175, "weight": 75]

for (key, value) in myDict {
    print(key, value)
}

/*
 age 25
 height 175
 weight 75
 */

1-7. keys

keys 속성을 사용하면 딕셔너리의 전체 키 값에 대해서만 접근할 수 있다.

var myDict = ["age": 25, "height": 175, "weight": 75]

print(myDict.keys) // ["age", "height", "weight"]


for k in myDict.keys {
    print(k)
}
/*
 age
 height
 weight
 */

1-8. values

values 속성을 사용하면 키 값에 대응되는 값에 대해서만 접근할 수 있다.

var myDict = ["age": 25, "height": 175, "weight": 75]

print(myDict.values) // [25, 175, 75]


for v in myDict.values {
    print(v)
}

/*
 25
 175
 75
 */

딕셔너리(Dictionary) 역시 Python에서 자주 사용했던 것인데 Swift에도 존재하니 반갑다.

키-값 구조는 JSON 등 정말 자주 사용되는 형식이므로 내용을 잘 기억해두어야겠다.

 

끝!