μ„€λͺ…

  • Key-Value μ €μž₯ν•˜λŠ” μ»¬λ ‰μ…˜ νƒ€μž…
  • ν•΄μ‹œ ν…Œμ΄λΈ”λ‘œ κ΅¬ν˜„λ˜μ–΄μžˆμŒ
    • λΉ λ₯Έ μ†λ„λ‘œ μ ‘κ·Ό, μˆ˜μ •, μΆ”κ°€, ν‚€ 쑴재 μ—¬λΆ€ 확인 κ°€λŠ₯ O(1)
let scores = ["roy": 95, "gucci": 82, "yeni": 90]

// λͺ¨λ‘ O(1) μ‹œκ°„
let royScore = scores["roy"]           // 95
let gucciScore = scores["gucci"]       // 82
scores["terry"] = 75                    // μΆ”κ°€

유의

μ œκ±°μ‹œ O(n)의 κ°€λŠ₯μ„±

  • κ°’ 제거 (removeValue(forKey: key))의 경우 κΈ°μˆ μ μœΌλ‘œλŠ” O(1)둜 κ΅¬ν˜„λ˜μ–΄ 있음
  • ν•˜μ§€λ§Œ Copy-On-Write μ΅œμ ν™” λ•Œλ¬Έμ— O(n) λ³΅μž‘λ„λ₯Ό κ°€μ§ˆ 수 있음.
// 첫 번째 Dictionary
var dict1 = ["a": 1, "b": 2, "c": 3]

// dict2λŠ” dict1κ³Ό λ©”λͺ¨λ¦¬λ₯Ό 곡유 (Copy-on-Write)
var dict2 = dict1

// 이 제거 연산은 dict1을 μˆ˜μ •ν•˜κΈ° 전에 전체 볡사가 ν•„μš”ν•  수 있음 (O(n))
dict1.removeValue(forKey: "a")

ν™œμš©

Key 쑴재 확인

// πŸ‘ O(1) : 직접 μ ‘κ·Όν•΄μ„œ 확인
if dict["key"] != nil { ... }

// 😱 O(n) : λ°°μ—΄λ‘œ λ³€ν™˜ ν›„ μˆœνšŒν•˜κΈ° λ•Œλ¬Έμ— λΉ„νš¨μœ¨μ μ΄λ‹€.
if dict.keys.contains("yeni") { ... }

Value 쑰회

// πŸ‘ O(1) : ν•΄μ‹œ 기반 직접 쑰회
let value = scores["yeni"]

// 🀩 값이 없을 μˆ˜λ„ μžˆμœΌλ―€λ‘œ Optional μ²˜λ¦¬κ°€ ν•„μš”ν•˜λ‹€.
if let score = scores["yeni"] {
    print("Alice's score: \(score)")
}