배열 생성하기
1
2
3
4
5
6
7
8
9
10
11
12
13
|
let emptyArray: [Int] = [1, 2, 3]
let emptyArray1: [Int] = [] // 빈 배열 생성
let emptyArray2 = Array<Int>()
let emptyArray3 = [Int]()
let anyArray = [Any] = [1, 2, "three", 4.0] // Any 타입으로 여러 자료형을 묶을 수도 있다.
let nums = Array(1...3) // [1, 2, 3] // 범위 연산자 사용 가능
// (repeating: 배열의 타입과 일치하는 값(1개), count: 값을 반복할 횟수)
let emptyArray4 = [Int](repeating: 0, count: 10) // [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
배열 갯수 확인
1
2
3
4
5
|
var numbers = [1, 2, 3]
let count: Int = numbers.count // 배열 갯수 확인 : 3
let isEmpty: Bool = numbers.isEmpty // 배열이 비어있는지 확인 : false
// numbers.count == 0 을 사용할 수도 있지만 numbers.isEmpty도 가능
|
배열 요소 접근
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
var emptyArray: [Int] = []
var numbers = [1, 2, 3]
// Subscript로 접근
numbers[0] // 1
numbers[1] // 2
// 범위로 접근
numbers[0...1] // [1, 2]
// 속성으로 접근
numbers.first // Optional(1)
numbers.last // Optional(3)
emptyArray.first // nil - 배열이 비어있다면 nil을 반환
numbers[numbers.startIndex] // 1
numbers[numbers.endIndex] // error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).
// endIndex는 배열의 마지막 인덱스가 아님!!
numbers[numbers.index(before: numbers.endIndex)] // 3
|
❓ endIndex
The array’s “past the end” position—that is, the position one greater than the last valid subscript argument.
공식문서에서는 endIndex를 배열의 끝을 지난 인자 라고 정의하고 있다;
1
2
3
4
5
|
var numbers = [10, 20, 30, 40, 50]
if let i = numbers.firstIndex(of: 30) {
print(numbers[i ..< numbers.endIndex])
}
// Prints "[30, 40, 50]"
|
배열에 요소 추가하기(append, insert)
1
2
3
4
5
6
7
|
// 1. append : 배열 끝에 추가
numbers.append(4) // [1, 2, 3, 4]
numbers.append(contentsOf: [5, 6]) // [1, 2, 3, 4, 5, 6]
// 2. insert : 중간에 추가
numbers.insert(0, at: 0) // [0, 1, 2, 3, 4, 5, 6]
numbers.insert(contentsOf: [10, 100], at: 2) // [0, 1, 10, 100, 2, 3, 4, 5, 6]
|
insert
를 사용하는 경우 배열을 재배치 해야 하기 때문에 오버헤드
가 발생한다.
배열 요소 삭제하기(remove)
1
2
3
4
5
6
7
8
9
|
var array1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
array1.remove(at: 2) // [1, 2, 4, 5, 6, 7, 8, 9]
array1.removeFirst() // [2, 4, 5, 6, 7, 8, 9]
array1.removeFirst(2) // [5, 6, 7, 8, 9]
array1.removeLast() // [5, 6, 7, 8]&
array1.popLast() // [5, 6, 7]
array1.removeLast(2) // [5]
array1.removeAll() // []
|
함수 이름 |
용도 |
리턴 타입 |
remove(at:) |
파라미터로 받은 index에 해당하는 값 삭제 |
삭제된 값 리턴, Non-Optional Type |
removeFirst |
첫 번째 요소 삭제 |
삭제된 값 리턴, Non-Optional Type |
removeFirst(_:) |
첫 번째 요소부터 파라미터로 받은 갯수 만큼 삭제 |
X |
removeLast |
마지막 요소 삭제 |
삭제된 값 리턴 , Non-Optional Type |
popLast |
마지막 요소 삭제 |
삭제된 값 리턴, Optional Type |
removeLast(_:) |
마지막 요소부터 파라미터로 받은 갯수 만큼 삭제 |
X |
removeAll |
전체 요소 삭제 |
X |
특정 범위 삭제하기
1
2
3
4
|
var array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
array2.removeSubrange(1...3) // [1, 5, 6, 7, 8, 9]
array2[0..<2] = [] // [6, 7, 8, 9]
|
함수 이름 |
용도 |
리턴 타입 |
removeSubrange(_:) |
파라미터로 받은 범위만큼 index 요소 삭제 |
X |
[n...m] = [] |
Subscript 문법으로 n ~ m까지 index 요소 삭제 |
X |
배열 비교하기(elementsEqual)
1
2
3
4
5
6
|
var array1 = [1, 2, 3]
var array2 = [1, 2, 3]
var array3 = [1, 2, 3, 4, 5,]
array1 == array2 //true
array1.elementsEqual(array3) //false
|
elementsEqual
은 모든 요소가 똑같아야 true
를 리턴한다.
배열 요소 검색(contains)
contains(_:)
을 사용하여 특정 값이 포함되어 있는지를 확인할 수 있다. Bool 타입으로 알려준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
let numbers = Array(1...10) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.contains(1) // true
numbers.contains {
number in number % 2 == 0 // true - 짝수가 하나라도 있으면 true
}
numbers.first { // 클로저 조건을 만족하는 첫번째 `값`을 리턴, 없으면 nil
bnumber in number % 2 == 0 // Optional(2)
}
numbers.firstIndex { // 클로저 조건을 만족하는 첫번째 `인덱스`를 리턴, 없으면 nil
number in number % 2 == 0 // Optional(1)
}
|
배열 정렬하기 (sort, sorted)
1
2
3
4
5
6
7
8
9
|
var numbers = [1, 5, 3, 8, 6, 10, 14]
// sort - 배열을 직접 정렬
numbers.sort() // [1, 3, 5, 6, 8, 10, 14] 오름차순
numbers.sort(by: >) // [14, 10, 8, 6, 5, 3, 1] 내림차순
//sorted - 원본은 그대로 두고, 새로우누 배열을 만들어 리턴
let sortedArray = numbers.sorted() // [1, 3, 5, 6, 8, 10, 14] 오름차순
let sortedArray2 = numbers.sorted(by: >) // [14, 10, 8, 6, 5, 3, 1] 내림차순
|
배열 요소 섞기(shuffle, shuffled)
1
2
3
4
5
|
var numbers = [1, 2, 3, 4, 5]
numbers.shuffle() // [4, 1, 5, 3, 2]
let shuffleNumbers = numbers.shuffled() // [5, 2, 1, 3, 4]
|
배열 요소 위치 바꾸기(swapAt)
1
2
|
var numbers = [1, 2, 3, 4, 5]
numbers.swapAt(0, 4) // 0과 4 인덱스 변경 [5, 2, 3, 4, 1]
|
함수 이름 참고사항 (-ed, -ing)
Swift에서 보통 함수 이름에 -ed
, -ing
가 붙는 것들은 원본은 그대로 두고, 새로운 것을 리턴함!
Reference
https://developer.apple.com/documentation/swift/array
https://developer.apple.com/documentation/swift/array/endindex
https://developer.apple.com/documentation/swift/array/shuffle()
https://developer.apple.com/documentation/swift/string/shuffled()
https://axe-num1.tistory.com/19
https://soooprmx.com/swift-array-01-%EC%83%9D%EC%84%B1%EA%B3%BC-%EC%A1%B0%EC%9E%91/
https://babbab2.tistory.com/92?category=828998