iOS 응용 (swift)
[iOS - swift] 배열 합치는 연산자 주의 사항 (reduce, flatMap, joined)
jake-kim
2024. 7. 26. 01:24
결합 연산자
- 2차원 배열을 1차원 배열로 만들 때, 3가지의 연산자 사용이 가능
var a = [[1, 2], [3], [4, 5]]
let a_1 = a.flatMap { $0 }
let a_2 = a.reduce([], +)
let a_3 = Array(a.joined())
// [1, 2, 3, 4, 5]
- 하지만 여기서 reduce 연산자를 사용하면 O(n^2)의 비용이 들고 flatMap, joined를 사용하면 O(n) 비용이 들기때문에 reduce를 지양할 것
reduce를 사용했을때 O(n^2) 비용이 드는 이유
- 3*3 배열일때 예시
var b = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- 초기 상태 = []
- 첫번째 배열 순회하면서 append: [[1, 2, 3]]
- 누적 연산 카운트: 3
- 두번째 배열 순회하면서 append: [1, 2, 3, 4, 5, 6]
- 누적 연산 카운트: 6
- 두번째 배열 순회하면서 append: [1, 2, 3, 4, 5, 6, 7, 8, 9]
- 누적 연산 카운트: 9
- 총 9 연산되어 3*3, 즉 2차원 배열의 개수가 n*n이라고 한다면 n*n번 연산을 하므로 O(n^2) 비용이 소비됨