티스토리 뷰

Swift/Swift 문법

[고차함수 5] forEach, compactMap, flatMap

내일은개발천재🎵 2022. 12. 29. 16:59

forEach 함수

  • 기존 배열 등의 각 아이템을 활용해서 각 아이템 별로 특정 작업을 실행한다.
    • 클로저는 return 타입 없이 작업을 할 뿐이다.
      • return → Void (새로운 배열을 반환하지 않는다.)
    • 기존 배열의 아이템을 가지고 작업을 하는 것이다.
let numbers = [1, 2, 3, 4, 5]

numbers.forEach { num in
	print(num)
}

numbers.forEach { print($0) }

compactMap 함수

  • 기존 배열 등 각 아이템을 새롭게 매핑해서 변형하되, 옵셔널 요소는 제거하고, 새로운 배열을 리턴한다.
  • map 함수 + 옵셔널 제거 기능이 있다고 생각하면 된다.
    • optional binding의 기능이 내장되어있다.
let strings = [String?] = ["A", nil, "C"]

var result = strings.compactMap { $0 }
print(result)
// result = strings.filter { $0 != nil }.map { $0! }
let numbers = [-2, -1, 0, 1, 2]
// 0보다 큰 경우만 result에 담는다.
var result = numbers.compactMap { $0 >= 0 ? $0 : nil }
// result = numbers.filter { $0 >= 0 }

flatMap 함수

  • 내부에 중첩된 배열을 벗겨준다.
  • 중첩된 배열의 각 아이템을 새롭게 매핑하며, 내부 중첩된 배열을 제거하고 리턴한다.
    • 매핑 방식은 클로저에서 정의한다.
var nestedArray = [[1, 2, 3], [4, 5, 6]]
print(nestedArray.flatMap{ $0 }
var nestedArray = [[[1,2,3], [4,5,6], [7, 8, 9]], [[10, 11], [12, 13, 14]]]

var result = nestedArray
	.flatMap { $0 }
    .flatMap { $0 }

print(result)

앨런님의 강의를 듣고 작성한 글입니다. 

'Swift > Swift 문법' 카테고리의 다른 글

[Swift] 에러처리, (feat 피보나치수열)  (0) 2023.01.02
[ARC 1] Swift의 메모리 관리 모델  (0) 2022.12.30
[고차함수 4] reduce  (0) 2022.12.29
[고차함수 3] filter  (0) 2022.12.29
[고차함수 2] Map  (0) 2022.12.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함