Swift์๋ 3๊ฐ(Array,Set,Dictionary)์ ์ฝ๋ ์ ํ์ ์ด ์๋ค.
Swift์์ ๋ฐฐ์ด, ์งํฉ, ๋์ ๋๋ฆฌ๋ ์ธ์ ๋ ์ ์ฅํ๊ณ ์ ํ๋ ํค๊ฐ์ด๋, ํ์ ์ ๋ํด ๋ช ํํ๋ค.
NOTEโ๏ธ
Swift์ ๋ฐฐ์ด,์งํฉ,๋์ ๋๋ฆฌ์ ํ์ ์ ์ ๋ค๋ฆญ์ผ๋ก ๊ตฌํ๋๋ค.
์ฝ๋ ์ ์ ๊ฐ๋ณ์ฑ (Mutablility of Collections)
์ฝ๋ ์ ์์ฑํ๊ณ ๋ณ์์ ํ ๋น ํ์ ๊ฒฝ์ฐ ๋ณ๊ฒฝ(์ถ๊ฐ,์ญ์ ,๋ณ๊ฒฝ) ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฌ๋ ์์์ ํ ๋นํ๋ฉด ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅ ํ๋ค.
NOTEโ๏ธ
์ฝ๋ ์ ์ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋ณ๊ฒฝ ์์๋ก ์ฝ๋ ์ ์ ๋ง๋๋ ๊ฒ์ด ์ข๋ค. ๊ทธ๋ฌ๋ฉด ์ฝ๋์ ๋ํด ๋ ์ฝ๊ฒ ์ถ๋ก ํ ์ ์๊ณ Swift ์ปดํ์ผ๋ฌ๊ฐ ์์ฑํ ์ฝ๋ ์ ์ ์ฑ๋ฅ์ ์ต์ ํ ํ ์ ์๋ค.
๋ฐฐ์ด (Arrays)
๋ฐฐ์ด (array)์ ๊ฐ๊ฐ์ ๊ฐ์ ์์์ ๋ฐ๋ฅธ Index๋ฅผ ์ ์ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๊ฐ์ ๊ฐ์ด ํ๋์ ๋ฐฐ์ด์์ ๋ค๋ฅธ ์์๋ก ์ ์ฅ ๋ ์ ์๋ค.
๋ฐฐ์ด ํ์ ๊ตฌ๋ฌธ (Array Type Shorthand Syntax)
๋ฐฐ์ด ์ ์ธ Array<ํ์ > , [Element]
๋น๋ฐฐ์ด ์ ์ธ
var someInts: [Int] = []
let emptyArray2 = Array<Int>()
let emptyArray3 = [Int]()
print("someInts is of type [Int] with \(someInts.count) items.")
// Prints "someInts is of type [Int] with 0 items."
๊ธฐ๋ณธ๊ฐ ๋ฐฐ์ด ์์ฑ (Creating an Array with a Default Value)
var threeDoubles = Array(repeating: 0.0, count: 3)
// threeDoubles is of type [Double], and equals [0.0, 0.0, 0.0]
๋ฐฐ์ด ์ ๊ทผ๊ณผ ์์ (Accessing and Modifying an Array
numsArray.count
numsArray.isEmpty
numsArray.contains(1) //ํ๋ผ๋ฏธํฐ๋ก ๊ฐ์ ์ ๋ฌ
numsArray.contains(8)
numsArray.randomElement()
numsArray.swapAt(0, 1)
numsArray = [1, 2, 3, 4, 5] // ๋ฐฐ์ด ๋ฆฌํฐ๋ด
stringArray = ["Apple", "Swift", "iOS", "Hello"]
// [] ์๋ธ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ(๋๊ดํธ๋ฅผ ์ด์ฉํ ํน๋ณํ ํจ์)
stringArray[0]
stringArray[1]
stringArray[2]
stringArray[3]
stringArray[1] = "Steve"
print(stringArray)
stringArray.first // ๋ฆฌํด๊ฐ String? ====> ๋น ๋ฐฐ์ด์ด๋ผ๋ฉด nil ๋ฆฌํด
stringArray.last
// ๋ฐฐ์ด์ ์์ ์ธ๋ฑ์ค
stringArray.startIndex
stringArray.endIndex
//stringArray.endIndex.advanced(by: -1)
stringArray[stringArray.startIndex]
stringArray[stringArray.endIndex - 1]
//stringArray[stringArray.index(before: stringArray.endIndex)]
//stringArray.index(<#T##i: Int##Int#>, offsetBy: <#T##Int#>)
stringArray.firstIndex(of: "iOS") // ์์์ ๋ถํฐ ์ฐพ์์๋ "iOS"๋ ๋ฐฐ์ด์ (์์์๋ถํฐ) ๋ช๋ฒ์งธ
stringArray.lastIndex(of: "iOS") // ๋ค์์ ๋ถํฐ ์ฐพ์์๋ "iOS"๋ ๋ฐฐ์ด์ (์์์๋ถํฐ) ๋ช๋ฒ์งธ
if let index = stringArray.firstIndex(of: "iOS") {
print(index)
}
var alphabet = ["A", "B", "C", "D", "E", "F", "G"]
// ์ ๋๋ ์ค๊ฐ์ ์ฝ์
ํ๊ธฐ
alphabet.insert("c", at: 4)
//alphabet.insert("c", at: alphabet.endIndex)
alphabet.insert(contentsOf: ["a","b","c"], at: 0)
//alphabet.insert(contentsOf: ["a","b","c"], at: alphabet.endIndex)
- ๊ต์ฒดํ๊ธฐ (replace)
alphabet = ["A", "B", "C", "D", "E", "F", "G"]
// ์์ ๊ต์ฒดํ๊ธฐ
alphabet[0] = "a"
// ๋ฒ์๋ฅผ ๊ต์ฒดํ๊ธฐ
alphabet[0...2] = ["x", "y", "z"]
// ์ํ๋ ๋ฒ์ ์ญ์
alphabet[0...1] = []
alphabet
// ๊ต์ฒดํ๊ธฐ ํจ์ ๋ฌธ๋ฒ
alphabet.replaceSubrange(0...2, with: ["a", "b", "c"])
- ์ถ๊ฐํ๊ธฐ (append)
alphabet = ["A", "B", "C", "D", "E", "F", "G"]
alphabet += ["H"]
// ์ถ๊ฐํ๊ธฐ ํจ์ ๋ฌธ๋ฒ
alphabet.append("H") // ๋งจ ๋ง์ง๋ง์ ์ถ๊ฐํ๋ ๊ฒ
alphabet.append(contentsOf: ["H", "I"])
//alphabet.append(7) // ์๋ฌ ===> ๋์ผํ ์๋ฃํ๋ง ์ ์ฅ๊ฐ๋ฅํจ
- ์ญ์ (์ ๊ฑฐ)ํ๊ธฐ (remove)
alphabet = ["A", "B", "C", "D", "E", "F", "G"]
// ์๋ธ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ผ๋ก ์ญ์
alphabet[0...2] = [] //๋น๋ฐฐ์ด ์ ๋ฌํ๋ฉด ํด๋น ๋ฒ์๊ฐ ์ญ์
// ์์ ํ๊ฐ ์ญ์
alphabet.remove(at: 2) // ์ญ์ ํ๊ณ , ์ญ์ ๋ ์์ ๋ฆฌํด
//alphabet.remove(at: 8) // ์๋ชป๋ ์ธ๋ฑ์ค ์ ๋ฌ ====> ์๋ฌ๋ฐ์
// ์์ ๋ฒ์ ์ญ์
alphabet.removeSubrange(0...2)
alphabet = ["A", "B", "C", "D", "E", "F", "G"]
alphabet.removeFirst() // ๋งจ ์์ ์์ ์ญ์ ํ๊ณ ์ญ์ ๋ ์์ ๋ฆฌํด (๋ฆฌํดํ String)
alphabet.removeFirst(2) // ์์ ๋๊ฐ์ ์์ ์ญ์ ===> ๋ฆฌํด์ ์ํจ
alphabet.removeLast() // ๋งจ ๋ค์ ์์ ์ญ์ ํ๊ณ ์ญ์ ๋ ์์ ๋ฆฌํด (๋ฆฌํดํ String)
alphabet.removeLast(2)
// ๋ฐฐ์ด์ด ๋น์ด์๋์ง๋ ์ ํ์ธํด๋ณด๊ณ ์ญ์ (์ ๊ฑฐ)ํด์ผํจ =======> ์๋ฌ
// alphabet.removeFirst() // ๋ฆฌํดํ String
// alphabet.removeLast() // ๋ฆฌํดํ String
// ๋ฐฐ์ด์ ์์ ๋ชจ๋ ์ญ์ (์ ๊ฑฐ)
alphabet.removeAll()
alphabet.removeAll(keepingCapacity: true) // ์ ์ฅ๊ณต๊ฐ์ ์ผ๋จ์ ๋ณด๊ดํด ๋ . (์์ ๋ฐ์ดํฐ๋ง ์ผ๋จ ๋ ๋ฆผ)
- ๋ฐฐ์ด์ ๊ธฐํ ๊ธฐ๋ฅ
var nums = [1, 2, 3, 1, 4, 5, 2, 6, 7, 5, 0]
// ๋ฐฐ์ด์ ์ ๋ฆฌํด๋ณด๊ธฐ
// 1) ๋ฐฐ์ด์ ์ง์ ์ ๋ ฌํ๋ ๋ฉ์๋ sort (๋์ฌ)
// 2) ์ ๋ ฌ๋ ์๋ก์ด ๋ฐฐ์ด์ ๋ฆฌํด sorted (๋์ฌing/๋์ฌed)
nums.sort() // ๋ฐฐ์ด์ ์ง์ ์ ๋ ฌ (์ค๋ฆ์ฐจ์) (๋ฐฐ์ด๋ฆฌํด ํ์ง ์์)
nums.sorted() //์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
nums.reverse() // ์์๋ฅผ ์ญ์์ผ๋ก ์ ๋ ฌ (๋ฐฐ์ด๋ฆฌํด ํ์ง ์์)
nums.reversed()
nums.sorted().reversed()
// ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ์ง ์๊ณ , ๋ฐฐ์ด์ ๋ฉ๋ชจ๋ฆฌ๋ ๊ณต์ ํ๋ฉด์ ์ญ์์ผ๋ก ์ด๊ฑฐํ ์ ์๋ ํ์์ ๋ฆฌํด
// ๋ฐฐ์ด์ ๋๋ค์ผ๋ก ์๊ธฐ
//nums.shuffle() // ์์์ ์์ ๋๋ค์ผ๋ก ์ง์ ๋ฐ๊พธ๊ธฐ
//nums.shuffled()
- ๋ฐฐ์ด์ ๋น๊ต
let a = ["A", "B", "C"]
let b = ["a", "b", "c"]
// ๋ ๋ฐฐ์ด์ ๋น๊ตํด๋ณด๊ธฐ
a == b // false
a != b // true
// ๊ฐ๋ณ์์ ๋น๊ต, ์ ์ฅ์์๋ ๋น๊ต ํ๊ธฐ ๋๋ฌธ์
- ํ์ฉ
// ํน์ ์์ ํ๊ฐ ์ญ์ ํ๊ธฐ
// ===> ์ง์ ์ญ์ ๋ ๋ถ๊ฐ (1) ์ธ๋ฑ์ค ์ฐพ์์, (2) ์ธ๋ฑ์ค์ ํด๋นํ๋ ์์ ์ง์ฐ๊ธฐ
var puppy1 = ["p", "u", "p", "p", "y"]
if let lastIndexOfP = puppy1.lastIndex(of: "p") {
puppy1.remove(at: lastIndexOfP)
}
if !nums.isEmpty { // "!"(true ====> false) (false ====> true)
print("\(nums.count) element(s)")
} else {
print("empty array")
}
// ๋ฐฐ์ด์ ๋ฐฐ์ด ์ ๊ทผ
var data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
data[0][2]
- ๋ฐ๋ณต๋ฌธ๊ณผ์ ๊ฒฐํฉ
// ๊ฐ ์์์ ์ฐจ๋ก๋๋ก ์ ๊ทผ, ๋ฐฐ์ด๊ณผ ๋ฐ๋ณต๋ฌธ์ ํ์ฐ์ ์ผ๋ก ๋ง์ด ์ฐ์
for i in nums {
print(i)
}
//:> enumerate: ์์ด๋ก ์ด๊ฑฐํ๋ค๋ ๋ป
// enumerated() ===> ์ด๊ฑฐ๋ ๊ฒ๋ค์ Named ํํ ํํ๋ก ํ๊ฐ์ฉ ์ ๋ฌ
// ๋ฐ์ดํฐ ๋ฐ๊ตฌ๋์ด๊ธฐ ๋๋ฌธ์,
// ์ค์ ๋ฒํธํ(index)๊น์ง ๋ถ์ฌ์, ์ฐจ๋ก๋๋ก ํ๋์ฉ ๊บผ๋ด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ์ ์์ด์ ์๋์ฒ๋ผ ํ์ฉ ๊ฐ๋ฅ
nums = [10, 11, 12, 13, 14]
// (offset: 0, element: 10)
for tuple in nums.enumerated() {
//print(tuple)
print("\(tuple.0) - \(tuple.1)")
}
for (index, word) in nums.enumerated() { // ๋ฐ๋ก ๋ฝ์๋ด๊ธฐ
print("\(index) - \(word)")
}
for (index, value) in nums.enumerated().reversed() { // ๊ฑฐ๊พธ๋ก ๋ค์์ ๋ถํฐ
print("\(index) - \(value)")
}
์งํฉ (Sets)
์งํฉ์ ๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ ์์์ ์๊ด์์ด ๊ฐ์ ์ ์ฅํ๋ค. ์์๊ฐ ์ค์ํ์ง ์๊ฑฐ๋ ๊ฐ์ด ์ค๋ณต๋๋ฉด ์๋ ๋ ์ฌ์ฉํ๋ค.
์งํฉ ํ์ ์ ์ํ ํด์ฌ ๊ฐ (Hash Values for Set Types
์งํฉ์ ๊ฐ์ Hashableํด์ผ ํ๋ค. ํด์ฌ ๊ฐ์ ์ ์๋ก์จ ๋ชจ๋ ๊ฐ์ฒด์ ๋ํด ๋์ผํ๋ค. Swift์ ๋ชจ๋ ๊ธฐ๋ณธ ํ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก Hashableํ๊ณ ์งํฉ์ ๊ฐ ๋๋ ๋์ ๋๋ฆฌ์ ํค ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ๋ํ ์ฐ๊ด๊ฐ์ด ์๋ ์ด๊ฑฐํ ์ผ์ด์ค ๊ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก Hashable ํ๋ค.
๋น์งํฉ ์ ์ธ
var letters = Set<Character>()
let emptySet: Set<Int> = []
print("letters is of type Set<Character> with \(letters.count) items.")
// Prints "letters is of type Set<Character> with 0 items."
์งํฉ ์ ๊ทผ๊ณผ ์์ (Accessing and Modifying a Set)
- Set์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ
set.count
set.isEmpty
set.contains(1)
set.randomElement()
- ์ ๋ฐ์ดํธ (update) - ์ฝ์ ํ๊ธฐ / ๊ต์ฒดํ๊ธฐ / ์ถ๊ฐํ๊ธฐ
// ์๋ธ์คํฌ๋ฆฝํธ ๊ด๋ จ ๋ฌธ๋ฒ ์์ โญ๏ธ
// (์ ์ ๊ธฐ๋ฅ) ํจ์ ๋ฌธ๋ฒ
set.update(with: 1) // Int?
set.update(with: 7) // ์๋ก์ด ์์๊ฐ ์ถ๊ฐ๋๋ฉด ====> ๋ฆฌํด nil
Set๋ append ํจ์๋ฅผ ์ ๊ณตํ์ง ์์
append๋ ์์๊ฐ ์๋ ์ปฌ๋ ์ ์ ๋์ ์ถ๊ฐํ๋ ๊ฐ๋
Set์ ์์๊ฐ ์๊ธฐ ๋๋ฌธ์, update๋ฅผ ํตํด์ ์ถ๊ฐ
- ์ญ์ (์ ๊ฑฐ)ํ๊ธฐ (remove)
var stringSet: Set<String> = ["Apple", "Banana", "City", "Swift"]
// ์์ ์ญ์ ํด ๋ณด๊ธฐ
stringSet.remove("Swift") // "Swift" ์ญ์ ํ ์์๋ฅผ ๋ฆฌํด
stringSet // ["Hello", "Apple"]
// ์กด์ฌํ์ง ์๋ ์์๋ฅผ ์ญ์ ํด๋ณด๊ธฐ
stringSet.remove("Steve") // nil (์๋ฌ๋ ๋ฐ์ํ์ง ์์)
// ์ ์ฒด์์ ์ญ์
stringSet.removeAll()
stringSet.removeAll(keepingCapacity: true)
- Set์ ์ ์
var a: Set = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var b: Set = [1, 3, 5, 7, 9]
var c: Set = [2, 4, 6, 8, 10]
var d: Set = [1, 7, 5, 9, 3]
- Set์ ๋น๊ต
a == b
a != b
//Set(์ ๋ ฌ๋์ง ์์ ์ปฌ๋ ์
)์ ์ด์งํผ ์์๋ ์ค์ํ์ง ์์
b == d // ํญ์ true
- ๋ถ๋ถ์งํฉ / ์์์งํฉ / ์๋ก์
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = [1, 3, 5, 7, 9] // ํ์ ๋ชจ์
c = [2, 4, 6, 8, 10] // ์ง์ ๋ชจ์
d = [1, 7, 5, 9, 3] // ํ์ ๋ชจ์
// ๋ถ๋ถ์งํฉ ์ฌ๋ถ๋ฅผ ํ๋จ
b.isSubset(of: a) // true ๋ถ๋ถ์งํฉ ์ฌ๋ถ
b.isStrictSubset(of: a) // false ์ง๋ถ๋ถ์งํฉ ์ฌ๋ถ
// ์์์งํฉ
a.isSuperset(of: b) // true ์์์งํฉ ์ฌ๋ถ
a.isStrictSuperset(of: b) // false ์ง์์์งํฉ ์ฌ๋ถ
// ์๋ก์ ์ฌ๋ถ
d.isDisjoint(with: c)
- ํฉ์งํฉ
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = [1, 3, 5, 7, 9]
c = [2, 4, 6, 8, 10]
d = [1, 7, 5, 9, 3]
var unionSet = b.union(c)
//b.formUnion(c) // ์๋ณธ๋ณ๊ฒฝ
- ๊ต์งํฉ
var interSet = a.intersection(b)
//a.formIntersection(b) // ์๋ณธ๋ณ๊ฒฝ
- ์ฐจ์งํฉ
var subSet = a.subtracting(b)
//a.subtract(b) // ์๋ณธ๋ณ๊ฒฝ
- ๋์นญ์ฐจ์งํฉ
var symmetricSet = a.symmetricDifference(b)
//a.formSymmetricDifference(b) // ์๋ณธ๋ณ๊ฒฝ
- ๋ฐ๋ณต๋ฌธ๊ณผ์ ๊ฒฐํฉ
let iteratingSet: Set = [1, 2, 3]
for num in iteratingSet { // ์ ๋ ฌ๋์ง ์์ ์ปฌ๋ ์
์ด๊ธฐ ๋๋ฌธ์, ์คํํ ๋๋ง๋ค ์์๊ฐ ๋ฌ๋ผ์ง
print(num)
}
- ๊ธฐํ ์ ์์
var newSet: Set = [1, 2, 3, 4, 5]
var newArray: Array = newSet.sorted()
//:> Set์ ์ ๋ ฌํ๋ฉด, ๋ฐฐ์ด๋ก ๋ฆฌํดํจ (์ ๋ ฌ์ ์์๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ)
๋์ ๋๋ฆฌ (Dictionaries)
๋์ ๋๋ฆฌ๋ ์์์ ์๊ด์์ด ํ์ ์ ํค์ ๊ฐ์ผ๋ก ์ ์ฅํ๋ค. ๊ฐ ๊ฐ์ ๋์ ๋๋ฆฌ ๋ด๋ถ์์ ์ ์ผํ ํค๊ฐ๊ณผ ๋์น๋๋ค. ํน์ ๋จ์ด๋ฅผ ์ฐพ๊ธฐ์ํด ์ฌ์ ์์ ์ฐพ๋ ๋ฐฉ๋ฒ์ฒ๋ผ ์๋ณ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ์ฐพ๋๋ค.
๋น ๋์ ๋๋ฆฌ ์์ฑ
var namesOfIntegers = [Int: String]()
let emptyDic1: Dictionary<Int, String> = [:]
let emptyDic2 = Dictionary<Int, String>()
// namesOfIntegers is an empty [Int: String] dictionary
๋์ ๋๋ฆฌ ์ ๊ทผ๊ณผ ์์
- ๋์ ๋๋ฆฌ์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ
dic = ["A": "Apple", "B": "Banana", "C": "City"]
dic.count
dic.isEmpty
// contains ํจ์๊ฐ ์กด์ฌํ๊ธด ํ๋, ๋ค์์ ๋ฐฐ์ธ ํด๋ก์ ์ ๋ด์ฉ์ ์์์ผํจ
// dic.contains(where: <#T##((key: String, value: String)) throws -> Bool#>)
dic.randomElement() // Named Tuple ํํ๋ก ๋ฆฌํด
- ๋์ ๋๋ฆฌ์ ๊ฐ ์์(element)์ ๋ํ ์ ๊ทผ (ํค ๊ฐ์ผ๋ก ์ ๊ทผ)
// ๋ฐฐ์ด
var numsArray = [1, 2, 3, 4, 5]
numsArray[0]
//:> ๋์
๋๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ธ์คํฌ๋ฆฝํธ[ ]๋ฅผ ์ด์ฉํ ๋ฌธ๋ฒ์ ์ฃผ๋ก ์ฌ์ฉ
// ๋์
๋๋ฆฌ
dic = ["A": "Apple", "B": "Banana", "C": "City"]
dic["A"] // nil์ ๊ฐ๋ฅ์ฑ =====> String?(์ต์
๋)
//print(dic["A"])
//print(dic["Q"])
if let a = dic["A"] { // ์ต์
๋ ๋ฐ์ธ๋ฉ
print(a)
} else {
print("Not found")
}
// ๋์
๋๋ฆฌ๋ ๊ฐ๋ง ๋ฐ๋ก ๊ฒ์ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง ์์. โญ๏ธ
// ์๋ธ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ผ๋ก "ํค"๋ฅผ ์ ๋ฌ
// ์ฐธ๊ณ (์ ์ฌ์ฉํ์ง๋ ์์)
dic["S", default: "Empty"] // nil์ด ๋ฐ์ํ ํ๋ฅ ์ด ์์
// ์๋ฃ๊ฐ ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ์ ๋ฆฌํดํ๋ ๋ฌธ๋ฒ ===> ๋ฆฌํด String
dic.keys
dic.values
dic.keys.sorted()
dic.values.sorted()
for key in dic.keys.sorted() { // ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ===> "return ๋ฐฐ์ด" ๋ฐฐ์ด์ด ๋จ
print(key)
}
- ์ ๋ฐ์ดํธ (update) - ์ฝ์ ํ๊ธฐ / ๊ต์ฒดํ๊ธฐ / ์ถ๊ฐํ๊ธฐ
words = [:]
words["A"] = "Apple" // ์ ํ๋ก ๋ค์ ๋ฐ๊พธ๊ธฐ
words
words["B"] = "Banana" // ๋์ผํ ํค๊ฐ ์์ผ๋ฉด ===> ์ถ๊ฐํ๊ธฐ
words
words["B"] = "Blue" // ๋์ผํ ํค๊ฐ ์์ผ๋ฉด ===> ๊ธฐ์กด ๋ฐธ๋ฅ ๋ฎ์ด์ฐ๊ธฐ
words
words.updateValue("City", forKey: "C")
// (์ ์ ๊ธฐ๋ฅ) ํจ์ ๋ฌธ๋ฒ (update + insert = upsert)
words.updateValue("City", forKey: "C") // ์๋ก์ด ์์๊ฐ ์ถ๊ฐ๋๋ฉด ==> ๋ฆฌํด nil
words
//words = [:] // ๋น ๋์
๋๋ฆฌ๋ก ๋ง๋ค๊ธฐ
words = ["A": "A"] // ์ ์ฒด ๊ต์ฒดํ๊ธฐ(๋ฐ๊พธ๊ธฐ)
//:> ๋์
๋๋ฆฌ๋ append ํจ์๋ฅผ ์ ๊ณตํ์ง ์์
// append๋ ์์๊ฐ ์๋ ์ปฌ๋ ์
์ ๋์ ์ถ๊ฐํ๋ ๊ฐ๋
// ๋์
๋๋ฆฌ๋ ์์๊ฐ ์๊ธฐ ๋๋ฌธ์, update๋ฅผ ํตํด์ ์ถ๊ฐ
- ์ญ์ (์ ๊ฑฐ)ํ๊ธฐ (remove)
dic = ["A": "Apple", "B": "Banana", "C": "City"]
// ์์ ์ญ์ ํด ๋ณด๊ธฐ
dic["B"] = nil // ํด๋น์์ ์ญ์
dic
dic["E"] = nil // ์กด์ฌํ์ง ์๋ ํค/๊ฐ์ ์ญ์ ======> ์๋ฌด์ผ์ด ์ผ์ด๋์ง ์์(์๋ฌ์๋)
dic
// ํจ์๋ก ์ญ์ ํด๋ณด๊ธฐ
dic.removeValue(forKey: "A") // ์ญ์ ํ, ์ญ์ ๋ ๊ฐ ๋ฆฌํด
dic.removeValue(forKey: "A") // ๋ค์ ์ญ์ ํด๋ณด๊ธฐ ===> nil๋ฆฌํด
// ์ ์ฒด ์ญ์ ํ๊ธฐ
dic.removeAll()
dic.removeAll(keepingCapacity: true)
- ๋์ ๋๋ฆฌ์ ๋น๊ต
let a = ["A": "Apple", "B": "Banana", "C": "City"]
let b = ["A": "Apple", "C": "City", "B": "Banana"]
// ๋น๊ต ์ฐ์ฐ์
a == b // true
// ๋์
๋๋ฆฌ๋ ์๋ ์์๊ฐ ์๊ธฐ ๋๋ฌธ์, ์์๋ ์๊ด์์
// (์์ ์๊ด์์ด ๋ฌด์กฐ๊ฑด true๋์ด - Hashableํ๊ธฐ ๋๋ฌธ์, ์์ ์๊ด์์ด ๋น๊ต๊ฐ๋ฅ)
a != b // false
- ๋์ ๋๋ฆฌ์ ํ์ฉ
// ๋์
๋๋ฆฌ์ ์ค์ฒฉ ์ฌ์ฉ
var dict1 = [String: [String]]() // ๋์
๋๋ฆฌ ๋ฐธ๋ฅ์ "๋ฐฐ์ด"์ด ๋ค์ด๊ฐ ์๋ ์๋ค.
dict1["arr1"] = ["A", "B", "C"]
dict1["arr2"] = ["D", "E", "F"]
dict1
//dict1["arr"] = "A"
var dict2 = [String: [String: Int]]() // ๋์
๋๋ฆฌ ์์ ๋์
๋๋ฆฌ๊ฐ ๋ค์ด๊ฐ ์ ์๋ค.
dict2["dic1"] = ["name": 1, "age": 2]
dict2["dic2"] = ["name": 2, "age": 4]
dict2
- ๋ฐ๋ณต๋ฌธ๊ณผ์ ๊ฒฐํฉ
// ๋์
๋๋ฆฌ ์ด๊ฑฐํด์ ํ๋ฆฐํธ ํ๊ธฐ
let dict = ["A": "Apple", "B": "Banana", "C": "City"]
// ๋์
๋๋ฆฌ๋ ์ด๊ฑฐํ์ง ์์๋, Named ํํ ํํ๋ก ํ๋์ ๊บผ๋ด์ ์ ๋ฌ
// ์์๊ฐ ์์ผ๋ฏ๋ก, ์คํ๋ง๋ค ์์๊ฐ ๋ฌ๋ผ์ง โญ๏ธ
// ๋ฐ์ดํฐ ๋ฐ๊ตฌ๋์ด๊ธฐ ๋๋ฌธ์,
// ์ฐจ๋ก๋๋ก ํ๋์ฉ ๊บผ๋ด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ์ ์์ด์ ์๋์ฒ๋ผ ํ์ฉ ๊ฐ๋ฅ
for (key, value) in dict {
print("\(key): \(value)")
}
for (key, _) in dict {
print("Key :", key)
}
for (_, value) in dict {
print("Value :", value)
}
'๐ฆ Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Functions (0) | 2022.06.01 |
---|---|
Control Flow (0) | 2022.06.01 |
Strings and Characters (0) | 2022.05.22 |
Basicย Operators (0) | 2022.05.15 |
The Basics (0) | 2022.05.15 |