μλ νμΈμ! μ΄λ² ν¬μ€ν μ Swift λ°μ΄ν°κ΅¬μ‘°μ μκ³ λ¦¬μ¦ μ± μ 2μ₯ μ€ν°λ μ€ λλ²μ§Έ ν΅μ¬ λ΄μ©μΈ Collection Type μ λν λ΄μ©μ λλ€. Array (λ°°μ΄), Dictionary (λμ λ리, μ¬μ ν), Set (μΈνΈ), Tuple(νν) λ€κ°μ§ νμ μ λν΄ νμ΅νμ΅λλ€.
π λμ λ리(Dictionary; μ¬μ ν)
λμ λ리λ λμΌν λ°μ΄ν° νμ μ΄ Key: Value μμΌλ‘ λ¬ΆμΈ μμκ° μλ 컬λ μ (Unordered Collection)μ λλ€. Value λ μ€μ λ‘ λ΄κ³ μλ κ°, Key λ ν΄λΉ κ°μ μ΄λ¦ν(μλ³μ, Identifier)μ κ°μ μν μ ν©λλ€. Key λ₯Ό ν΅ν΄ Value λ₯Ό κ°μ Έμ€λ κ²μ΄μ§μ! λμ λ리μ λ°μ΄ν° ꡬ쑰λ μ΄λ¦μμλ λνλλ―μ΄ μ¬μ κ³Ό μ μ¬ν λ°μ΄ν° νμ μΈλ°μ. μ¬μ μμ μ°Ύλ λ¨μ΄κ° Key κ³ λ¨μ΄μ λ»μ΄ Value μ΄λ€ μκ°νλ©΄ λ κ² κ°μμ!
μ°Έκ³ λ‘, Dictionary μ Key νμ μ Hashable νλ‘ν μ½μ λΆν©ν΄μΌ ν©λλ€. Hashable νμ μ μ μΌνκ² νν κ°λ₯ν κ°μ μ 곡νλ νμ μΌλ‘, κ²μμ΄ μ©μ΄ν©λλ€. λ°μ΄ν°κ΅¬μ‘°μ μμκ° μκΈ° λλ¬Έμ hashable ν νμ μ΄μ΄μΌ μμλ₯Ό λΉ λ₯΄κ² μ°Ύμ μ μκΈ° λλ¬Έμ λλ€. Swift μ λͺ¨λ κΈ°λ³Έ νμ (Int, Double ... enumeration)μ Hashable νλ‘ν μ½μ λ°λ₯΄κΈ° λλ¬Έμ, κΈ°λ³Έ νμ μΌλ‘ λμ λ리λ₯Ό ꡬμ±μμλ ν¬κ² μ κ²½μ°μ§ μμλ λ κ² κ°μ΅λλ€! μμΈν λ΄μ©μ 2μ₯ μμ½μ νμΈν΄μ£ΌμΈμ
βοΈ Dictionary μ΄κΈ°ν
- λΉμ΄μλ λμ λ리 μ μΈ λ°©λ²
- μ΄κΈ°νμ Key : Value μμ μ£Όλ λμ λ리 μ μΈ λ°©λ²
- Swift μμ μλ£νμ μμ±νμ§ μμλ μ μΆνμ¬ μ§μ λμ§λ§, λͺ μν΄μ£Όλ κ² λ μ’μ κ² κ°μ΅λλ€!
// λΉμ΄μλ λμ
λ리 μ μΈ λ°©λ²
var dict1 = Dictionary<Int, String>()
var dict2 = [Int: String]()
var dict3: [Int: String] = [:]
// μ΄κΈ°νμ Key : Value μμ μ£Όλ λμ
λ리 μ μΈ λ°©λ²
var dict4: [Int: String] = [1: "One", 2: "Two", 3: "Three"]
var dict5 = [1: "One", 2: "Two", 3: "Three"]
βοΈ Dictionary Key/Value μ μΆκ°, λ³κ²½, μμ
- updateValue(_:forKey:)
νΉμ ν€μ κ°μ μΆκ°νκ±°λ λ³κ²½ν μ μλ λ©μλ. κΈ°μ‘΄μ μ‘΄μ¬νλ κ°μ λ°ν. - removeValue(forKey:)
νΉμ ν€μ κ°μ μμ ν μ μλ λ©μλ. κΈ°μ‘΄μ μ‘΄μ¬νλ κ°μ λ°ν. - μλΈμ€ν¬λ¦½νΈ λ¬Έλ²
dict[key] = value ννμ λ¬Έλ²μ ν΅ν΄μ νΉμ ν€μ κ°μ μΆκ°, λ³κ²½, μμ ν μ μλ€.
dict4.updateValue("33333", forKey: 3)
// ν€/κ° λ³κ²½ -> [3: "33333", 1: "One", 2: "Two"]
dict4.updateValue("Four", forKey: 4)
// ν€/κ° μΆκ° -> [3: "33333", 1: "One", 2: "Two", 4: "Four"]
dict4.removeValue(forKey: 1)
// ν€/κ° μμ -> [2: "Two", 3: "33333", 4: "Four"]
// μλΈμ€ν¬λ¦½νΈλ‘ key κ°μ μ§μ
dict4[1] = "11111" // μΆκ°
dict4[5] = "Five" // λ³κ²½
dict4[2] = nil // μμ
// [5: "Five", 4: "Four", 1: "11111", 3: "33333"]
βοΈ Dictionary μμ κ° κ°μ Έμ€κΈ°
μλΈμ€ν¬λ¦½νΈ λ¬Έλ²μ ν΅ν΄μ λμ λ리μ νΉμ ν€μ κ°μ κ°μ Έμ¬ μ μμ΅λλ€. λ°ν κ°μ Optional type μΌλ‘, λμ λ리μ νΉμ ν€κ° μλ κ²½μ° nil μ΄ λ°νλ©λλ€. Optional binding λλ Forced Unwrapping μ ν΅ν΄ Optional μ΄ μλ νΉμ νμ μ κ°μ κ°μ Έμ¬ μ μμ΄μ!
- Optional binding :: if let ꡬ문μ ν΅ν΄ Optional νμ μ κ°μ΄ μλμ§ νμΈν ν, μλ‘μ΄ λ³μ/μμμ λμ νλ λ°©μμ΄λ€.
- Forced Unwrapping :: ! (exclamation mark) λ₯Ό λΆμ¬ κ°μ λ‘ Optional νμ μ νΉμ νμ μΌλ‘ λ³ννλ€. ν€κ° λ°λμ μλ€λ κ²μ κ°μ νλ―λ‘ κ°μ΄ nil κ²½μ° λ°νμ μλ¬κ° λ°μνλ€.
// Optional binding
if let value = dict4[1] {
print(value)
} else {
print("Key not found")
}
// Forced Unwrapping
let value1 = dict4[1]! // "11111"
let value2 = dict4[2]! // error!
βοΈ Dictionary μμ λ°λ³΅λ¬Έμ ν΅ν΄ key, value κ°μ Έμ€κΈ°
- for (key, value) in dict λ₯Ό ν΅ν΄ key, value λ₯Ό ν¨κ» λ°λ³΅ν μ μλ€.
- for key in dict.keys λ₯Ό ν΅ν΄ key λ§ λ°λ³΅ν μ μλ€.
- for value in dict.values λ₯Ό ν΅ν΄ value λ§ λ°λ³΅ν μ μλ€.
var myDict = [1: "One", 2: "Two", 3: "Three"]
for (key, value) in myDict {
print(key, value)
}
for key in myDict.keys {
print(key)
}
for value in myDict.values {
print(value)
}
π‘ Dictionary μ λ ¬νκΈ° ?!
κΈ°λ³Έμ μΌλ‘ Dictionary λ μμκ° μλ 컬λ μ μ λλ€! κ·ΈμΉλ§ sorted(by:) λ©μλλ₯Ό μ΄μ©ν΄ μμλ₯Ό μ§μ ν μ μμ΄μ! μμκ° μ λ ¬λ λμ λλ¦¬κ° μλ, λμ λ리μ (key, value) λ₯Ό Tuple ννλ‘ λ¬Άμ΄, μ λ ¬λ λ°°μ΄μ λ°νν©λλ€.
- key κΈ°μ€μΌλ‘ μ λ ¬μ sorted ν¨μμ {$0.0 < $1.0} ν΄λ‘μ λ₯Ό μ λ¬
첫λ²μ§Έ μΈμμ key κ° λλ²μ§Έ μΈμμ key λ³΄λ€ μμΌλ©΄ μλ‘μ΄ λ°°μ΄μ μΆκ°νλ€. - value κΈ°μ€μΌλ‘ μ λ ¬μ sorted ν¨μμ {$0.1 < $1.1} ν΄λ‘μ λ₯Ό μ λ¬
첫λ²μ§Έ μΈμμ value κ° λλ²μ§Έ μΈμμ value λ³΄λ€ μμΌλ©΄ μλ‘μ΄ λ°°μ΄μ μΆκ°νλ€.
var scoreDict: [Int: Int] = [1: 90, 2: 50, 3: 30, 4: 100]
// key κ° κΈ°μ€μΌλ‘ μ λ ¬
let keySortedDict = scoreDict.sorted(by: {$0.0 < $1.0})
print(keySortedDict)
// [(key: 1, value: 90), (key: 2, value: 50), (key: 3, value: 30), (key: 4, value: 100)]
// value κ° κΈ°μ€μΌλ‘ μ λ ¬
let valueSortedDict = scoreDict.sorted(by: {$0.1 < $1.1})
print(valueSortedDict)
// [(key: 3, value: 30), (key: 2, value: 50), (key: 1, value: 90), (key: 4, value: 100)]