DevlogπŸ‘©πŸ»‍πŸ’»/Swift

[Swift] μ»¬λ ‰μ…˜ νƒ€μž…(Collection Type) - Array

yujjne 2024. 1. 23. 18:18

TIL 240123

 

πŸ“μ»¬λ ‰μ…˜ νƒ€μž…(Collection Type)μ΄λž€?

μŠ€μœ„ν”„νŠΈλŠ” λ§Žμ€ 수의 데이터λ₯Ό λ¬Άμ–΄μ„œ μ €μž₯ν•˜κ³  관리할 수 μžˆλŠ” μ»¬λ ‰μ…˜ νƒ€μž…μ„ μ œκ³΅ν•œλ‹€.

μ»¬λ ‰μ…˜ νƒ€μž…μ˜ μ’…λ₯˜λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

 

  • Array
  • Dictionary
  • Set
νƒ€μž… μ„€λͺ…
Array μˆœμ„œκ°€ μžˆλŠ” 리슀트 μ»¬λ ‰μ…˜
Dictionary 킀와 κ°’μ˜ 쌍으둜 이루어진 μ»¬λ ‰μ…˜
Set μˆœμ„œκ°€ μ—†κ³ , 멀버가 μœ μΌν•œ μ»¬λ ‰μ…˜

 


 

 λ°°μ—΄(Array)

배열은 멀버가 μˆœμ„œ(인덱슀)λ₯Ό 가진 리슀트 ν˜•νƒœμ˜ μ»¬λ ‰μ…˜ νƒ€μž…μ΄λ‹€.

 

1. λ°°μ—΄μ˜ μ„ μ–Έκ³Ό 생성

λ°°μ—΄ νƒ€μž…μ„ μ„ μ–Έν•΄ 쀄 방법은 λ‹€μ–‘ν•˜λ‹€.
ArrayλΌλŠ” ν‚€μ›Œλ“œμ™€ νƒ€μž… μ΄λ¦„μ˜ μ‘°ν•©μœΌλ‘œ μ‚¬μš© κ°€λŠ₯ν•˜κ³  λŒ€κ΄„ν˜Έλ‘œ κ°’을 λ¬Άμ–΄ Array νƒ€μž…μž„μ„ ν‘œν˜„ν•  μˆ˜λ„ μžˆλ‹€.
빈 λ°°μ—΄μ€ μ΄λ‹ˆμ…œλΌμ΄μ €, λ¦¬ν„°λŸ΄ λ¬Έλ²•μ„ ν†΅ν•΄ μƒμ„±ν•  μˆ˜ μžˆλ‹€.

// 1. νƒ€μž… μΆ”λ‘  : λŒ€κ΄„ν˜Έλ₯Ό μ‚¬μš©ν•˜μ—¬ λ°°μ—΄μž„μ„ ν‘œν˜„
var arr = [1, 2, 3, 4]
var arr = [] // error: νƒ€μž… μΆ”λ‘ μœΌλ‘œ 빈 λ°°μ—΄ 생성 λΆˆκ°€

// 2. νƒ€μž… Annotation : [Int]은 Array<Int>의 μΆ•μ•½ ν‘œν˜„ 
var arr: [Int] = [1, 2, 3, 4]
var arr: [Int] = []

// 3. 빈 Array 생성
var arr: Array<Int> = Array<Int>()
// 같은 ν‘œν˜„
var arr: Array<Int> = [Int]()
var arr: Array<Int> = []
var arr: [Int] = Array<Int>()
var arr: [Int] = [Int]()
var arr: [Int] = []
var arr = [Int]()

 

 

2. λ°°μ—΄μ˜ μ ‘κ·Όκ³Ό μˆ˜μ •

λ°°μ—΄μ˜ 개수 ν™•μΈν•˜κΈ°

 

count : λ°°μ—΄μ˜ μš”μ†Œ 개수 확인

let numbers = [1, 2, 3, 4, 5]
let count = numbers.count // 5

 

is Empty : 배열이 λΉ„μ–΄μžˆλŠ”μ§€ μ—¬λΆ€ 확인

let numbers = [1, 2, 3, 4, 5]
let isEmpty = numbers.isEmpty // false

 

contains : 배열이 νŠΉμ • μš”μ†Œλ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ”μ§€ μ—¬λΆ€ 확인

let numbers = [1, 2, 3, 4, 5]
let containsTwo = numbers.contains(2) // true

 

 

λ°°μ—΄μ˜ μš”μ†Œμ— μ ‘κ·Όν•˜κΈ°

 

subscript syntax둜 μ ‘κ·Ό(λŒ€κ΄„ν˜Έ []) : 배열에 인덱슀λ₯Ό λ„£μ–΄ κ°’ λ°˜ν™˜

β€» λŸ°νƒ€μž„ μ—λŸ¬κ°€ λ‚˜μ§€ μ•Šλ„λ‘ μΈλ±μŠ€κ°€ μœ νš¨ν•΄μ•Ό ν•œλ‹€!

let numbers = [1, 2, 3, 4, 5]
let number1 = numbers[0] // 1
let number2 = numbers[1] // 2

// λ²”μœ„λ‘œλ„ μ ‘κ·Ό κ°€λŠ₯
let arr = numbers[0...1] // [1, 2]


first/ last : λ°°μ—΄μ˜ μ²« λ²ˆμ§Έ λ˜λŠ” λ§ˆμ§€λ§‰ μš”μ†Œλ₯Ό λ°˜ν™˜

let numbers = [1, 2, 3, 4, 5]
let firstNumber = numbers.first // 1
let lastNumber = numbers.last // 5

 

배열에 μš”μ†Œ μΆ”κ°€ν•˜κΈ°

 

append : λ°°μ—΄μ˜ λμ— μƒˆλ‘œμš΄ μš”μ†Œλ₯Ό μΆ”κ°€

var fruits = ["Apple", "Banana"]
fruits.append("Orange") // ["Apple", "Banana", "Orange"]


insert :배열에 νŠΉμ • μΈλ±μŠ€μ— μƒˆλ‘œμš΄ μš”μ†Œλ₯Ό μΆ”κ°€

var fruits = ["Apple", "Banana"]
fruits.insert("Grapes", at: 1) // ["Apple", "Grapes", "Banana"]

 

+= μ—°μ‚°μž : λ°°μ—΄μ— ν•˜λ‚˜ μ΄μƒμ˜ λ™λ“±ν•œ μ•„μ΄ν…œ μΆ”κ°€

var numbers = [1, 2, 3]
numbers += [4, 5] // [1, 2, 3, 4, 5]

 

 

λ°°μ—΄μ˜ μš”μ†Œ λ³€κ²½ν•˜κΈ°

 

subscript syntax둜 λ³€κ²½ 

var numbers = [1, 2, 3, 4, 5]

numbers[1] = 20 // [1, 20, 3, 4, 5]
numbers[1...3] = [10, 20, 30]  // [1, 10, 20, 30, 4, 5]

 

replaceSubrange : μ§€μ •λœ λ²”μœ„μ˜ μš”μ†Œλ₯Ό λ‹€λ₯Έ μš”μ†Œλ‘œ λ³€κ²½

var numbers = [1, 2, 3]
numbers.replaceSubrange(1..<2, with: [20, 30]) // [1, 20, 30, 4]


swap : νŠΉμ • μΈλ±μŠ€μ— ν•΄λ‹Ήν•˜λŠ” μš”μ†Œλ₯Ό μ„œλ‘œ λ³€κ²½

var numnbers = [1, 2, 3, 4, 5]
numbers.swapAt(0, 4) // [5, 2, 3, 4, 1]

 

 

λ°°μ—΄μ˜ μš”μ†Œ μ‚­μ œν•˜κΈ°

 

remove : λ°°μ—΄μ˜ μš”μ†Œλ₯Ό μ œκ±°

var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]

// 1. νŠΉμ • 인덱슀의 μš”μ†Œ μ‚­μ œ
numbers.remove(at: 3) // [1, 2, 3, 5, 6, 7, 8, 9]

// 2. λ°°μ—΄μ˜ 첫 번째 μš”μ†Œ μ‚­μ œ
numbers.removeFirst() // [2, 3, 5, 6, 7, 8, 9]

// 3. λ°°μ—΄μ˜ λ§ˆμ§€λ§‰ μš”μ†Œ μ‚­μ œ
numbers.removeLast()
print(numbers) // 좜λ ₯: [2, 3, 5, 6, 7, 8]

// 4. νŠΉμ • 쑰건을 λ§Œμ‘±ν•˜λŠ” μš”μ†Œ μ‚­μ œ (ν™€μˆ˜ 제거)
numbers.removeAll { $0 % 2 != 0 } // 좜λ ₯: [2, 6, 8]

// 5. λ°°μ—΄μ˜ 일뢀λ₯Ό μ‚­μ œ
numbers.removeSubrange(1..<3) // [2, 8]

// 6. 배열을 빈 λ°°μ—΄λ‘œ μ΄ˆκΈ°ν™”ν•˜μ—¬ λͺ¨λ“  μš”μ†Œ μ‚­μ œ
numbers = [] //[]

 

 

λ°°μ—΄ λ°˜λ³΅ν•˜κΈ°

 

for-in loop : λ°°μ—΄μ„ μˆœνšŒν•˜μ—¬ λ°°μ—΄μ˜ μ „체 κ°’ ν™•μΈ

for item in numbers {
    print(item)
} //λ°°μ—΄ numbers의 μš”μ†Œκ°€ μž„μ‹œμƒμˆ˜ item에 ν• λ‹Ήλ˜μ–΄ 반볡


enumerated : μš”μ†Œμ˜ μΈλ±μŠ€μ™€ ν•¨κ»˜ κ°’ ν™•μΈ

let fruits = ["Apple", "Banana", "Orange"]
for (index, fruit) in fruits.enumerated() {
    print("Index: \(index), Fruit: \(fruit)")
}

 

 

λΆˆλ³€ λ°°μ—΄

 

let을 μ‚¬μš©ν•˜μ—¬ Array μ„ μ–Έ : μˆ˜μ •μ΄ λΆˆκ°€λŠ₯ν•œ Arrayμ΄λ―€λ‘œ λ©€λ²„λ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μ‚­μ œν•  μˆ˜ μ—†λ‹€

let immutableArray = [1, 2, 3]

immutableArray.append(4) // error
immutableArray.removeAll() // error

 

 

μ΄λ ‡κ²Œ Collection νƒ€μž…κ³Ό 배열에 λŒ€ν•΄ 정리해 λ³΄μ•˜λ‹€.

 

λ©”μ„œλ“œλ“€μ΄ 정말 λ§Žμ•„μ„œ μ»¬λ ‰μ…˜ νƒ€μž…μ˜ λ”•μ…”λ„ˆλ¦¬μ™€ μ„ΈνŠΈλŠ” λ”°λ‘œ ν¬μŠ€νŒ…ν•΄μ•Όκ² λ‹€.

μƒˆλ‘œ μ•Œκ²Œ λ˜λŠ” λ°°μ—΄μ˜ λ©”μ„œλ“œλ“€λ„ λ‚˜μ€‘μ— μΆ”κ°€ν•΄ 두도둝 ν• κ²Œμš”!

 

 

β–Ό 🍏 참고자료

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/collectiontypes