관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 배열 합치는 연산자 주의 사항 (reduce, flatMap, joined) 본문

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) 비용이 소비됨

 

Comments