TIL 240124
μ λ²μλ 컬λ μ νμ κ³Ό Arrayμ λν΄ μμλ΄€λλ°
// 1. νμ
μΆλ‘
var dict = ["John": 90, "Alice": 95, "Bob": 80]
var dict = [] // error : νμ
μΆλ‘ μΌλ‘ λΉ λμ
λ리 μμ± λΆκ°
// 2. Type Annotation
//[String: Int]λ Dictionary<String, Any>μ μΆμ½ νν
var dict: [String: Int] = [:]
var dict: [String: Int] = ["John": 90, "Alice": 95, "Bob": 80]
// 3. λΉ Dictionary μμ±
var dict: Dictionary<String, Int> = [String: Int]()
// κ°μ νν
var dict: Dictionary <String, Int> = Dictionary<String, Int>()
var dict: Dictionary <String, Int> = [:]
var dict: [String: Int] = Dictionary<String, Int>()
var dict: [String: Int] = [String: Int]()
var dict: [String: Int] = [:]
var dict = [String: Int]()
컬λ μ νμ μ Dictionary, Setμ μ£Όλ‘ μ¬μ©λλ λ©μλμ μμ±μ λν΄ μ 리ν΄λ³Όκ²μ!
λμ λ리(Dictionary)
λμ λ리λ μμλ€μ΄ μμ μμ΄ ν€μ κ°μ μμΌλ‘ ꡬμ±λλ 컬λ μ νμ μ΄λ€.
μ μ₯λλ κ°μ νμ ν€μ μμ μ΄λ£¨κ² λλλ°, λμ λ리 μμλ ν€κ° νλμ΄κ±°λ μ¬λ¬ κ°μΌ μ μλ€.
λ¨, νλμ λμ λ리 μμ ν€λ κ°μ μ΄λ¦μ μ€λ³΅ν΄μ μ¬μ©ν μ μλ€!
1. λμ λ리μ μ μΈκ³Ό μμ±
μ΄λ κ² μ½λ μ€νμΌμ λ°λΌ λ€μν ννμ μ¬μ©νμ¬ λμ λ리λ₯Ό μ μΈν μ μλ€.
λ°°μ΄κ³Ό λ§μ°¬κ°μ§λ‘ μ€μννΈλ μλ£νμ λ―Όκ°νκΈ° λλ¬Έμ Typeμ κΌ λͺ μν΄ μ£Όκ±°λ μΆλ‘ ν μ μκ² μ΄κΈ°κ°μ μ§μ ν΄μ£Όμ΄μΌ νλ€.
λμ λ리μ ν€μ κ°μ κ°μ νμ μ λ°μ΄ν°κ° μ μ₯λλ€λ μ λ λΉμ°νμ§λ§ μ§μΌμ€μΌνλ κ²!
2. λμ λ리μ μ κ·Όκ³Ό μμ
λμ λ리μ κ°μ νμΈνκΈ°
count : λμ λ리μ μμ κ°μ νμΈ
var people: [String: Int] = ["John": 30, "Alice": 25, "Bob": 28]
let numberOfPeople = people.count // 3
isEmpty : λμ λλ¦¬κ° λΉμ΄μλμ§ μ¬λΆ νμΈ
var people: [String: Int] = ["John": 30, "Alice": 25, "Bob": 28]
let isDictionaryEmpty = people.isEmpty // false
λμ λ리μ μμμ μ κ·ΌνκΈ°( Key, Value μμ± λμ΄)
subscript syntaxλ‘ μ κ·Ό(λκ΄νΈ []) : λ°°μ΄μ μΈλ±μ€λ₯Ό λ£μ΄ κ° λ°ν
β» λ°νμ μλ¬κ° λμ§ μλλ‘ μΈλ±μ€κ° μ ν¨ν΄μΌ νλ€!
var people: [String: Int] = ["John": 30, "Alice": 25, "Bob": 28]
// λμ
λ리 μμ μ κ·Ό
let johnsAge = people["John"] // 30
let leeAge = people["lee"] // nil
// λμ
λ리 keys μμ±κ³Ό values μμ±
let allNames = people.keys // Dictionary.Keys(["Alice", "Bob", "John"])
let allAges = people.values // Dictionary.Values([25, 28, 30])
λμ λ리μ μμ μΆκ°νκΈ°
subscript syntax
- λμ λ리μ μλ‘μ΄ μμ μΆκ°
- νΉμ ν€μ κ° λ³κ²½ κ°λ₯
var people: [String: Int] = ["John": 30, "Alice": 25, "Bob": 28]
people["Charlie"] = 22 // μλ‘μ΄ μμ μΆκ°
people["Bob"] = 23 // value μ
λ°μ΄νΈ
updateValue : νΉμ ν€μ λν κ°μ μ λ°μ΄νΈνκ±°λ μλ‘μ΄ κ°μ μΆκ°
var people: [String: Int] = ["John": 30, "Alice": 25, "Bob": 28]
people.updateValue(26, forKey: "Alice") // Aliceμ λμ΄κ° 26μΌλ‘ μ
λ°μ΄νΈ
people.updateValue(33, forKey: "David") // DavidλΌλ keyμ λμ΄κ° μΆκ°
λμ λ리μ μμ μ κ±°νκΈ°
subscript syntax : nil ν λΉνμ¬ μ κ±°
var people: [String: Int] = ["John": 30, "Alice": 25, "Bob": 28]
// nilμ ν λΉνμ¬ νΉμ ν€ μμ
people["Alice"] = nil // Alice ν€μ κ°μ΄ μ κ±°λ¨
removeValue(forKey:) : νΉμ key μμ
removeAll : μ 체 μμ
// νΉμ μμ μμ
let removedAge = people.removeValue(forKey: "Bob") // Bobμ λμ΄κ° μ κ±°λκ³ removedAgeμλ μ κ±°λ κ°μ΄ λ°ν
// μ 체 μμ
people.removeAll()
λμ λ리 λ°λ³΅νκΈ°
for-in loop : λμ λ리 μννμ¬ μ 체 κ° νμΈ
for (name, age) in people {
print("\(name) is \(age) years old.")
}
enumerated : μμμ μΈλ±μ€μ ν¨κ» κ° νμΈ
for (index, (name, age)) in people.enumerated() {
print("Index: \(index), Name: \(name), age: \(age)")
}
Set(μ§ν©)
Setλ κ°μ νμ μ λ°μ΄ν°λ₯Ό μμ μμ΄ νλμ λ¬ΆμμΌλ‘ μ μ₯νλ ννμ 컬λ μ νμ μ΄λ€
Set λ΄μ κ°μ λͺ¨λ μ μΌν κ°, μ¦ μ€λ³΅λ κ°μ΄ μ‘΄μ¬νμ§ μλλ€.
κ·Έλμ Setμ λ³΄ν΅ μμκ° μ€μνμ§ μκ±°λ κ° μμκ° μ μΌν κ°μ΄μ΄μΌ νλ κ²½μ°μ μ¬μ©νλ€.
Setμ μμλ‘λ ν΄μ κ°λ₯ν κ°μ΄ λ€μ΄μμΌ νλ€.(Hashabe νλ‘ν μ½ μ€μ)
1. Setμ μ μΈκ³Ό μμ±
// λΉ Set μμ±
var numberSet: Set<Int> = Set<Int>()
// Type Annotation (νμ
μΆλ‘ μ λ°°μ΄λ‘ μΈμλκΈ° λλ¬Έμ λΆκ°ν¨)
var numberSet: Set<Int> = []
// μμ±μ
var numberSet = Set<Int>()
// μμ±μλ₯Ό μ¬μ©ν μ΄κΈ°ν
var numberSet: Set<Int> = [1, 2, 3]
λ°°μ΄κ³Ό λ§μ°¬κ°μ§λ‘ λκ΄νΈλ‘ κ°λ€μ λ¬Άμ΄ Set νμ μμ νννλ€.
[]λ₯Ό λμΌνκ² μ°κΈ° λλ¬Έμ νμ μΆλ‘ μ΄ λΆκ°νκ³ ,
λ°°μ΄κ³Ό λ¬λ¦¬ μ€μ¬μ ννν μ μλ Array<Int> λ₯Ό [Int]λ‘ μΈ μ μλ€.
2. Setμ μ κ·Όκ³Ό μμ
λ©μλμ νλ‘νΌν°λ‘ Setμ μ κ·Όκ³Ό μμ ν μ μλ€.
Setμ κ°μ νμΈνκΈ°
count : Setμ μμ κ°μ νμΈ
var numbers: Set<Int> = [1, 2, 3, 4, 5]
let count = numbers.count // 5
isEmpty : Setμ΄ λΉμ΄μλμ§ μ¬λΆ νμΈ
var numbers: Set<Int> = [1, 2, 3, 4, 5]
let isEmpty = numbers.isEmpty // false
contains : Setμ΄ νΉμ μμλ₯Ό ν¬ν¨νκ³ μλμ§ μ¬λΆ νμΈ
var numbers: Set<Int> = [1, 2, 3, 4, 5]
let containsTwo = numbers.contains(2) // true
Set μμ μΆκ° λ° μ κ±°
update : μ½μ , κ΅μ²΄, μΆκ°
var set1: Set<Int> = [1,1,2,2,3,3]
set1.update(with: 1) // 1 -> κΈ°μ‘΄μ μλ μμμ΄λ―λ‘ κ°μ μ΅μ
λ νμ
μΌλ‘ 리ν΄
set1.update(with: 7) // nil -> κΈ°μ‘΄μ μλ μμμ΄λ―λ‘ Setμ μμκ° μΆκ°λκ³ nil 리ν΄
insert : Setμ μμλ₯Ό μΆκ°
var numbers: Set<Int> = [1, 2, 3, 4, 5]
numbers.insert(6) // (inserted: true, memberAfterInsert: 6)
numbers.insert(1) // μ€λ³΅μΌ κ²½μ° (inserted: false, memberAfterInsert: 1)
remove : Setμ μμλ₯Ό μ κ±°
var numbers: Set<Int> = [1, 2, 3, 4, 5]
// νΉμ μμ μμ
numbers.remove(3) // μμ ν κ° return : 3
// μ 체 μμ
numbers.removeAll()
Set μ λ ¬
var numbers: Set<Int> = [5, 4, 1, 3, 2]
let sortedNumbers = numbers.sorted() // [1, 2, 3, 4, 5]
μμκ° μλ 컬λ μ μ΄κΈ° λλ¬Έμ μ λ ¬ν¨μλ₯Ό μ¬μ©ν΄μ μ λ ¬ν μ μλ€.
Setμ μ°μ°
κΈ°λ³Έμ μΈ μ§ν© μ°μ°μ μνν μ μλ€.
- intersection : (κ΅μ§ν©) λ μ§ν©μ κ³΅ν΅ κ°μ κ°μ§λ μλ‘μ΄ μ§ν©μ μμ±
- symmetricDifference : (μ¬μ§ν©μ ν©) λ μ§ν©μ κ³΅ν΅ κ°μ μ μΈν μλ‘μ΄ μ§ν©μ μμ±
- union : (ν©μ§ν©) λ μ§ν©μ λͺ¨λ κ°μΌλ‘ μλ‘μ΄ μ§ν©μ μμ±
- subtracting : (μ°¨μ§ν©) νΉμ μ§ν©μ κ³΅ν΅ κ°μ μ μΈν μλ‘μ΄ μ§ν©μ μμ±
let oddSet: Set<Int> = [1, 3, 5, 7, 9]
let evenSet: Set<Int> = [0, 2, 4, 6, 8]
let singleSet: Se<Int> = [2, 3, 5, 7]
oddSet.intersection(evenSet).sorted()
// []
oddSet.symmetricDifference(singleSet).sorted()
// [1, 2, 9]
oddSet.union(evenSet).sorted()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
oddSet.subtracting(singleSet).sorted()
// [1, 9]
Setμ ν¬ν¨κ΄κ³ μ°μ°
- isSubset(of:) : λ€λ₯Έ μ§ν©μ λΆλΆμ§ν©μΈμ§ νμΈ
- isSuperset(of:) : λ€λ₯Έ μ§ν©μ μ 체μ§ν©μΈμ§ νμΈ
- isDisjoint(with:) : 곡ν΅λ μμκ° μλμ§ νμΈ
let setA: Set<Int> = [1, 2, 3, 4, 5]
let setB: Set<Int> = [3, 4, 5, 6, 7]
let setC: Set<Int> = [8, 9, 10]
// setAλ setBμ λΆλΆμ§ν©μΈκ°?
let isSubset = setA.isSubset(of: setB) // true
// setBλ setAμ μ 체μ§ν©μΈκ°?
let isSuperset = setB.isSuperset(of: setA) // true
// setBμ setCλ 곡ν΅λ μμκ° μλκ°?
let isDisjoint = setB.isDisjoint(with: setC) // true
Set λ°λ³΅
- for - in loop
- for Each λ©μλ
var numbers: Set<Int> = [1, 2, 3, 4, 5]
for number in numbers {
print(number)
}
numbers.forEach { number in
print(number)
}
βοΈ μ 리
Collection type
: μ¬λ¬ κ°μ κ° λλ κ°μ²΄λ₯Ό κ·Έλ£Ήννκ³ κ΄λ¦¬νλ λ°μ΄ν° νμ μ΄λ€. μ λ€λ¦ν ννλ‘ κ΅¬νλμ΄ μμ΄, λ€μν λ°μ΄ν° νμ μ λ΄μ μ μλ€. λ€μν λ΄μ₯ ν¨μμ μμ±μ μ 곡νμ¬ λ°μ΄ν°λ₯Ό ν¨μ¨μ μΌλ‘ λ€λ£° μ μλ€.
Array
- μμκ° μλ 리μ€νΈ ννμ 컬λ μ
- κ° μμλ μΈλ±μ€λ₯Ό μ¬μ©νμ¬ μ κ·Ό
- var fruits: [String] = ["Apple", "Banana", "Cherry"]
Dictionary
- ν€μ κ°μ μμΌλ‘ μ΄λ£¨μ΄μ§ 컬λ μ νμ
- var capitals: [String: String] = ["Korea": "Seoul", "Japan": "Tokyo"]
Set
- Setλ μμκ° μκ³ , λ©€λ²κ° μ μΌν κ²μ 보μ₯νλ 컬λ μ νμ
- var colors: Set<String> = ["Red", "Green", "Blue"]
βΌ π μ°Έκ³ μλ£
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/collectiontypes
'Devlogπ©π»βπ» > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] μ΄κΈ°ν(Initializers) (0) | 2024.03.13 |
---|---|
[Swift] Optional (3) | 2024.03.08 |
[Swift] 컬λ μ νμ (Collection Type) - Array (3) | 2024.01.23 |
[Swift] String λ¬Έμμ΄μμ Index μ κ·ΌνκΈ°(String.Index) (2) | 2024.01.18 |
[Swift] νμ μΆλ‘ (Type Inference)κ³Ό νμ μ΄λ Έν μ΄μ (Type Annotation) (2) | 2024.01.17 |