[ Swift ๊ธฐ์ด ๋ฌธ๋ฒ ] ์ปฌ๋ ์ (Collection) - Array, Dictionary, Set
Array(๋ฐฐ์ด) / Dictionary(๋์ ๋๋ฆฌ) / Set(์งํฉ)
=> ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ๊บผ๋ฒ์ ๋ค๋ฃจ๋ ํ์
/* ๐ ์ปฌ๋ ์
/ ๋น ์ปฌ๋ ์
์์ฑ */
// 1. ๋ฐฐ์ด(array) - ์์๊ฐ ์์. ์์ ์ค๋ณต ๊ฐ๋ฅ ================================
var array1: Array<Int> = [1, 2, 3] // ์ ๊ท ๋ฌธ๋ฒ
var array2: [Int] = [1, 2, 3] // ๊ฐ๋จ ๋ฌธ๋ฒ
var array3 = [1, 2, 3] // ๋ฆฌํฐ๋ด : ํ์
์ ํด๋น๋๋ ๊ฐ์ ๊ทธ๋๋ก ์ฌ์ฉ
// ๋น ๋ฐฐ์ด ์์ฑ
var array11: [Int] = []
var array22 = Array<Int>()
var array33 = [Int]()
// 2. ๋์
๋๋ฆฌ(dictionary) - ์์๊ฐ ์์. ์์๋ hashable. ์์ ์ค๋ณต ๋ถ๊ฐ ===========
var dic1: Dictionary<String, Int> = ["name": 10, "age": 20] //์ ๊ท ๋ฌธ๋ฒ
var dic2: [String: String] = ["name": "ํ๊ธธ๋", "age": "20"] //๊ฐ๋จ ๋ฌธ๋ฒ
var dic3 = ["a": "apple", "b": "banana"] //๋์
๋๋ฆฌ ๋ฆฌํฐ๋ด๋ก ์ ์ธ
// ๋น ๋์
๋๋ฆฌ ์์ฑ
var dic11: Dictionary<String, Int> = [:] //์ ๊ท ๋ฌธ๋ฒ ๋น ๋์
๋๋ฆฌ
var dic22 = Dictionary<String, Int>() //๋น ๋์
๋๋ฆฌ
var dic33 = [String: String]() //๊ฐ๋จ ๋ฌธ๋ฒ ๋น ๋์
๋๋ฆฌ
// 3. ์งํฉ(Set) - ์์๊ฐ ์์. ์์๋ hashable. ์์ ์ค๋ณต ๋ถ๊ฐ ===================
var set1: Set<Int> = [1,3,2,1] // ์ถ๋ ฅ : [1, 3, 2] - ์ ๊ท ๋ฌธ๋ฒ
var set2: Set = [2,3,4,5] // ์ถ๋ ฅ : [5, 4, 2, 3] - ๋ฆฌํฐ๋ด๋ก ์์ฑ
// ๋น ์งํฉ ์์ฑ
var set1: Set<Int> = []
var set22 = Set<Int>()
/* ๋์ฌ์ํ: ์ปฌ๋ ์
์ง์ ๋ณ๊ฒฝ & ~ed : ์๋ณธ์ ์ ์งํ๊ณ ๋ณต์ฌ๋ณธ์ ๋ณ๊ฒฝ ํ ๋ฐํ
.sort() / .sorted()
.reverse() / .reversed()
.shuffle() / .shuffled()
*/
๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ ์์(element)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์์๋ค์ ์์๋๋ก(index) ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์ค๋ณต ๊ฐ๋ฅ.
let num1: Array<Int> = [1, 2, 3] // ์ ๊ท ๋ฌธ๋ฒ
let num2: [Int] = [1, 2, 3] // ๊ฐ๋จ ๋ฌธ๋ฒ
// ๋น ๋ฐฐ์ด ์์ฑ ๋ฐฉ๋ฒ
var array1: [Int] = []
var array2 = Array<Int>()
var array3 = [Int]()
/* ๋ฆฌํฐ๋ด : ํ์
์ ํด๋น๋๋ ๊ฐ์ ๊ทธ๋๋ก ์ฌ์ฉ */
var array = [1, 2, 3] // [Int] ํ์
์ ์ฐ์ง ์๊ณ ๋ฆฌํฐ๋ด๋ก ์ง์ ์ ์ธ ๋ฐฐ์ด์ ๊ฐ์ ์์ฑํ๊ณ ๋ฐฐ์ด์ ํ ๋น
/* ์ ๊ทผ ์ฐ์ฐ์ */
// โ
.count : ๋ฐฐ์ด์ ์์์ ๊ฐ์ ๋ค๋ฅธ ์ธ์ด์์๋ .length์ ๊ฐ์ ์ญํ =======================
array.count //์ถ๋ ฅ : 3
// โ
.isEmpty : ๋ฐฐ์ด์ ์์๊ฐ ๋น์ด ์๋์ง ์๋์ง ํ์ธ true/false ==========================
array.isEmpty //์ถ๋ ฅ : false
!array.isEmpty //์ถ๋ ฅ : true - !๋ ๊ฒฐ๊ณผ๊ฐ์ ๋ค์ง๋๋ค.
// โ
.contains() : ํด๋นํ๋ ๊ฐ์ ๊ฐ์ง๊ณ ์๋์ง ํ์ธํ๋ ํจ์. ํ๋ผ๋ฏธํฐ๋ก ()์์ ๊ฐ ์ ๋ฌ. true/false ===
array.contains(4) // ์ถ๋ ฅ : false
// โ
.randomElement() : ๋ฐฐ์ด์์ ์์๋ฅผ ๋๋ค ์ถ์ถ =======================================
array.randomElement() // ์ถ๋ ฅ : 1, 2, 3 ์ค ๋๋ค ์ถ๋ ฅ
// โ
.swapAt(index, index) : ํด๋นํ๋ ์ธ๋ฑ์ค์ ๊ฐ์ ๋ฐ๊พผ๋ค ==============================
array.swapAt(0, 1) // ์ถ๋ ฅ : [2,1,3]
// โ
.endIndex - 1 : ๋ฐฐ์ด์ ๋ง์ง๋ง ์ธ๋ฑ์ค =================================
array.endIndex - 1 // ์ถ๋ ฅ : 3
//์ต์
๋ ํ์
์ด๋ผ ์ข ๋ ์์ ํ ํ์
// โ
.first / .last : ๊ฐ์ฅ ์ฒซ๋ฒ์งธ์ ๋ง์ง๋ง ์์๋ฅผ ์ถ์ถ ===============================
array.firtst // ์ถ๋ ฅ : optional(1) ๋น๋ฐฐ์ด์ผ ๊ฒฝ์ฐ nil์ ๋ฆฌํดํ๊ธฐ ๋๋ฌธ์ ์ต์
๋ํ์
์ผ๋ก ๊ตฌํ๋จ
array.last // ์ถ๋ ฅ : optional(3) ๋ฐ๋ผ์ ํ์ฉํ ๋์๋ ์ต์
๋ ๋ฐ์ธ๋ฉ ํ ์ฌ์ฉํด์ผ ํจ
โ ๋ฐฐ์ด์ ์ฝ์ / ์ญ์ / ์ถ๊ฐ
var num: [Int] = [1, 2, 3]
/* โ
.insert() : ์ค๊ฐ์ ์ฝ์
-> ์ค๋ฒํค๋ ๋ฐ์ ๊ฐ๋ฅ ============================== */
// ๋ฐฐ์ด์ ์์ ์ฝ์
(1)
num.insert(4, at: 3) // ์ถ๋ ฅ : [1, 2, 3, 4]
num.insert(3, at: 1) // ์ถ๋ ฅ : [1, 3, 2, 3, 4]
// โ
๋ฐฐ์ด ์์ ์ฝ์
(2) - ํ๋ผ๋ฏธํฐ๋ก ๋ฐฐ์ด ์
๋ ฅ
num.insert(contentsOf: [5, 6], at: 5) // ์ถ๋ ฅ : [1, 3, 2, 3, 4, 5, 6]
/* โ
๊ต์ฒด ============================================================== */
// ์ธ๋ฑ์ค๋ก ์์์ ์ ๊ทผํ ๋ [ ]๋ฅผ ์ฌ์ฉํ๋ ํจ์๋ค. ์๋ธ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ด๋ผ๊ณ ํ๋ค.
num[0] // ์ถ๋ ฅ : 1
num[0] = 7 // [7, 3, 2, 3, 4, 5, 6]
// ์๋ธ์คํฌ๋ฆฝํธ๋ก ๋ฒ์๋ก ๊ต์ฒด
num[0...1] = [2, 2, 2] // [2, 2, 2, 3, 4, 5, 6]
// 21๋ฒ ํฌ๋์ ๋์ผํ ํจ์ ์ ์ ๋ฌธ๋ฒ
num.replaceSubrange(0...1, with: [1, 2, 3]) // [1, 2, 3, 3, 4, 5, 6]
//
num.firstIndex(of: 3) // ์ถ๋ ฅ : 2 ์์์๋ถํฐ ์ฐพ์์ ๋ ํด๋น ๊ฐ์ด ๋ช๋ฒ์งธ ์ธ๋ฑ์ค์ ์๋์ง
num.lastIndex(of: 3) // ์ถ๋ ฅ : 3 ๋ค์์๋ถํฐ ์ฐพ์์ ๋ ํด๋น ๊ฐ์ด ๋ช๋ฒ์งธ ์ธ๋ฑ์ค์ ์๋์ง
/* โ
.append() : ๋ฐฐ์ด ๋ง์ง๋ง์ ์ถ๊ฐ ํจ์ ====================================== */
num.append(7) // [1, 2, 3, 3, 4, 5, 6, 7]
num.append(contentsOf: [8,9]) // [1, 2, 3, 3, 4, 5, 6, 7, 8, 9]
/* โ
.remove() : ์ญ์ ================================================= */
num[0...2] = [] // [3, 4, 5, 6, 7, 8, 9]
num.remove(at: 1) // [3, 5, 6, 7, 8, 9] ํด๋น index ์์ ํ ๊ฐ ์ญ์
num.removeSubrange(0...1) // [6, 7, 8, 9] ํด๋น ๋ฒ์ ์์ ์ญ์
num.removeFirst() // [7, 8, 9] ์ ์ผ ์์ ์๋ ์์ ์ญ์
num.removeFirst(2) // [9] ์์์๋ถํฐ ๋๋ฒ์งธ๊น์ง ์์ ์ญ์
num.removeLast() // ๋งจ ๋ค์ ์๋ ์์ ์ญ์
num.removeLast(2) // ๋งจ ๋ค์์ ๋๋ฒ์งธ๊น์ง ์์ ์ญ์
// ๋ฆฌํด๊ฐ์ ๋์ต์
๋ ํ์
์ด๊ธฐ ๋๋ฌธ์ nil์ผ ๋ ์ค๋ฅ ๋ฐ์!!! ๋ฐฐ์ด์ด ๋น์๋์ง ์ ํ์ธ
num.removeAll() // ๋ฐฐ์ด ์์ ๋ชจ๋ ์ญ์
num.removeAll(keepingCapacity: true) // ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ณด๊ด
โ ๋ฐฐ์ด์ ์ ๋ ฌ
var nums = [9,1,0,2,3,9,2,5,3]
/* โ
.sort() ๋ฉ์๋ : ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ===================================== */
nums.sort() // ์ถ๋ ฅ : [0, 1, 2, 2, 3, 3, 5, 9, 9] - ๋ฐฐ์ด ์์ฒด๋ฅผ ๋ฐ๊ฟ์ ์ ๋ ฌ (๋ฐฐ์ด ๋ฆฌํด โ)
nums.sorted() // ์ถ๋ ฅ : [9, 1, 0, 2, 3, 9, 2, 5, 3]
// ์๋ณธ ๋ฐฐ์ด ์์ฒด๋ ๋ฐ๋์ง ์์. ์๋ก์ด ๋ณ๊ฒฝ๋ ๋ฐฐ์ด์ ๋ฆฌํด.
/* โ
.reversed() ๋ฉ์๋ : ๋ค์์๋ถํฐ ์ญ์์ผ๋ก ์ ๋ ฌ ======================== */
nums.reverse() // ์ถ๋ ฅ : [3, 5, 2, 9, 3, 2, 0, 1, 9]
nums.reversed() // ์ถ๋ ฅ : [9, 1, 0, 2, 3, 9, 2, 5, 3]
/* โ
.shuffle() : ๋ฐฐ์ด ๋๋ค์ผ๋ก ์ ๋ ฌ =================================== */
nums.shuffle()
nums.shuffled()
โ ๋ฐฐ์ด์ ํ์ฉ
var happyArray = ["b","a","n","a","n","a"]
if !happyArray.isEmpty {
print("ํดํผ!!") // ์ถ๋ ฅ : ํดํผ!!
} else {
print("no return")
}
// ํน์ ์์๋ฅผ ์ง์ฐ๊ธฐ ์ํด์๋ ์ธ๋ฑ์ค๋ฅผ ์ฐพ๊ณ ํด๋น ์ธ๋ฑ์ค์ ์์ ์ง์ฐ๊ธฐ
if let happy = happyArray.lastIndex(of: "a") { //๋ค์์๋ถํฐ ์ฒซ๋ฒ์งธ a์ ํด๋นํ๋ ์ธ๋ฑ์ค : 5
happyArray.remove(at: happy) //์ธ๋ฑ์ค 5๋ฒ์งธ์ ์์ ์ ๊ฑฐ
print(happyArray) //์ถ๋ ฅ : ["b", "a", "n", "a", "n"]
} else {
print("no return2!!!")
}
โ ๋ฐฐ์ด์ ์ค์ฒฉ
/* ๋ฐฐ์ด์ ๋ฐฐ์ด์ ์์๋ก ๋ด์ ์ ์๋ค ============ */
var array = [[1,2,3], [4,5,6], [2,3,4]]
array[0][2] // ์ถ๋ ฅ : 3 - array ๋ฐฐ์ด์ 0๋ฒ์งธ ์ธ๋ฑ์ค์ธ [1,2,3]์ ์ธ๋ฑ์ค 2์ ์์
๋์ ๋๋ฆฌ์ ์์๋ key์ value์ ์์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
key ๊ฐ์ ์ค๋ณต ๋ถ๊ฐ!!
์์์ ๊ตฌ๋ถ์ด ์๊ธฐ ๋๋ฌธ์ key ๊ฐ์ ์ ์ผํด์ผ ํ๋ค.
value์๋ ๋ฐฐ์ด์ ํ์ ๋ ์ค์ฒฉ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
/* ๋์
๋๋ฆฌ - ์์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ถ๋ ฅํ ๋๋ง๋ค ์์๊ฐ ๋ฌ๋ผ์ง๋ค ============================== */
var dic1: Dictionary<String, Int> = ["name": 10, "age": 20] //์ ๊ท ๋ฌธ๋ฒ
var dic2: Dictionary<String, Int> = [:] //์ ๊ท ๋ฌธ๋ฒ ๋น ๋์
๋๋ฆฌ
var dic3 = Dictionary<String, Int>() //๋น ๋์
๋๋ฆฌ
var dic4: [String: String] = ["name": "ํ๊ธธ๋", "age": "20"] //๊ฐ๋จ ๋ฌธ๋ฒ
var dic = [String: String]() //๊ฐ๋จ ๋ฌธ๋ฒ ๋น ๋์
๋๋ฆฌ
var dic6 = ["a": "apple", "b": "banan": "c": "orange"] //๋์
๋๋ฆฌ ๋ฆฌํฐ๋ด๋ก ์ ์ธ
/* ์ ๊ทผ ์ฐ์ฐ์ ================================================================= */
// โ
.count -> ๋ช๊ฐ์ ์์ธ์ง
// โ
.isEmpty -> true/false
// โ
.randomeElement() -> ์ถ๋ ฅ : (key: "name", value: 10)/ named tuple ํํ / ์ต์
๋ ํ์
if let d = dic1.randomElement(){
print(d) // ์ถ๋ ฅ : (key: "name", value: 10) , nil์ผ ๋ ์ถ๋ ฅ ์๋จ
}
// โ
.keys // ์ถ๋ ฅ : ["name", "age"]
// โ
.values
// โ
๋ฐฐ์ด๋ก ๋ณํ
dic1.keys.sorted()
for keys in temp { print(keys) } // ๋ฐ๋ณต๋ฌธ์ผ๋ก๋ ์ฌ์ฉ ๊ฐ๋ฅ
/* key ๊ฐ์ผ๋ก ์์์ ์ ๊ทผ ======================================================== */
dic1["age"]
print(dic1["age"]) // ์ถ๋ ฅ : optional(20) -> ํด๋น key๊ฐ์ด ์์ ๊ฒฝ์ฐ nil
// ์๋ธ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ[]๋ ํจ์์ด๊ธฐ ๋๋ฌธ์ key๊ฐ์ด ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋๋ค.
dic1["happy", default: 1] // ์ถ๋ ฅ : 1 -> ๋์ต์
๋ํ์
Int, ์ต์
๋ ๋ฐ์ธ๋ฉ ํ์ ์์
โ ๋์ ๋๋ฆฌ์ ์ ๋ฐ์ดํธ / ์ญ์
๋์ ๋๋ฆฌ๋ ์์๊ฐ ํ์ ์๊ธฐ ๋๋ฌธ์ insert, replace, append๋ฅผ update๊ฐ ๋์ ํ๋ค.
/* โ
.updateValue() : ์
๋ฐ์ดํธ ================================== */
var name = [String: String]()
name.updateValue("name", forKey: "jihyeon")
/* โ
.removeValue() : ์ญ์ ================================== */
name["name"] = nil // ์๋ธ์คํฌ๋ฆฝํธ ๋ฐฉ๋ฒ์ผ๋ก ํด๋น value ๊ฐ ์ญ์
name.removeValue(forKey: "name")
name.removeAll()
name.removeAll(keepingCapacity: true)
์์๊ฐ์ด ์ค๋ณต์ผ๋ก ๋ค์ด๊ฐ๋ ์ค๋ณต ์ ์ฅ ๋์ง ์๋๋ค.
hashing ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ์ผ๋ก ์ ๋ ฌ์์๋ณด๋ค ๊ฒ์ ์๋๊ฐ ์ค์ํ ๋ ์ฌ์ฉ
var nums1: Set<Int> = [1,3,2,1] // ์ถ๋ ฅ : [1, 3, 2] - ์ ๊ท ๋ฌธ๋ฒ
var nums2: Set = [2,3,4,5] // ์ถ๋ ฅ : [5, 4, 2, 3] - ๋ฆฌํฐ๋ด๋ก ์์ฑ
// ๋น Set ์์ฑ
var newSet1: Set<Int> = []
var newSet2 = Set<Int>()
โ ์งํฉ์ ๊ธฐ๋ณธ๊ธฐ๋ฅ/ ์ ๋ฐ์ดํธ / ์ญ์
๋ฐฐ์ด๊ณผ ๋์ ๋๋ฆฌ์ ๊ฐ์ด ์๋ธ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ์์โ
/* ์ ๊ทผ ์ฐ์ฐ์ : ๋ฐฐ์ด๊ณผ ๊ฐ์ด ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ๊ฐ๋ค */
// โ
.count =======================
nums1.count
// โ
.isEmpty =====================
nums1.isEmpty
// โ
.contains() : true/false ====
nums1.contains(4)
// โ
.randomElement() ============
nums1.randomElement()
/* ์
๋ฐ์ดํธ : ์ฝ์
& ์ถ๊ฐ & ๊ต์ฒด ======= */
// โ
. update(with: )
nums1.update(with: 1) // ์ถ๋ ฅ : [1, 3, 2] - ์์ 1์ ์ด๋ฏธ ์๊ธฐ ๋๋ฌธ์ ๋ณํจ์ด ์์
nums1.update(with: 7) // ์ถ๋ ฅ : [1, 3, 2, 7]
// โ
. remove()
nums1.remove(1) // ์ถ๋ ฅ : [3, 2, 7]
nums1.remove(9) // ์๋ ์์๋ฅผ ์ญ์ ํ๊ธฐ ๋๋ฌธ์ nil return
// ์ญ์ ํ๋ ค๋ ์์๊ฐ ์์ ์๋ ์๊ธฐ ๋๋ฌธ์ ๋ฐํ๊ฐ์ ์ต์
๋ ํ์
์ด๋ค.
nums1.removeAll() // ์ถ๋ ฅ : []
22๋ฒ ์ฝ๋๋ฅผ ์ข ๋ ์์ธํ๊ฒ ์ดํด๋ณด๋ฉด,
์๋ก์ด ์์๋ฅผ ์ถ๊ฐํ๋ ์ฝ๋ ์คํ ์ nil์ ๋ฐํํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
updateํ ๋ ๊ธฐ์กด์ ์๋ ๊ฐ์ ๋ฐํํ๊ณ
์๋ก ์ถ๊ฐํ ๊ฐ์ด ์ ๋ฐ์ดํธ๊ฐ ๋๋ค.
7์ด๋ผ๋ ์์๋ ๊ธฐ์กด์ ์์๋ ์์์ด๊ธฐ ๋๋ฌธ์
nil์ returnํ๊ณ ์ ์์ ์ผ๋ก update๋์๋ค๋ ์๋ฏธ์ด๋ค.
โ Set์ ์ ๋ ฌ์ ๋ฐฐ์ด๋ก return
var setNums: Set = [2,5,3,8,1]
var arrayNums: Array = setNums.sorted() //์ถ๋ ฅ : [1, 2, 3, 5, 8]
//์ ๋ ฌ์ ํ๋ sorted()๋ ์์๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด๋ก ๋ฐํ๋๋ค.
๐ Reference
- https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%EC%9C%84%ED%94%84%ED%8A%B8-%EB%AC%B8%EB%B2%95-%EB%A7%88%EC%8A%A4%ED%84%B0-%EC%8A%A4%EC%BF%A8&unitId=86570&tab=curriculum
[ Swift ๊ธฐ์ด ๋ฌธ๋ฒ ] ํด๋์ค(Class)์ ๊ตฌ์กฐ์ฒด(Struct) (0) | 2024.05.19 |
---|---|
[ Swift ๊ธฐ์ด ๋ฌธ๋ฒ ] ์ด๊ฑฐํ(Enumeration) (0) | 2024.05.17 |
[ Swift ๊ธฐ์ด ๋ฌธ๋ฒ ] ํํ(Tuple) (0) | 2024.05.11 |
[ Swift ๊ธฐ์ด ๋ฌธ๋ฒ ] ์ฐ์ฐ์(Operator) (0) | 2024.05.09 |
[ Swift ๊ธฐ์ด ๋ฌธ๋ฒ ] ์ต์ ๋ ํ์ (Optional Types) / Unwrapping / ์ต์ ๋ ๋ฐ์ธ๋ฉ(Optional Binding) (0) | 2024.05.02 |