카테고리 없음

[Swift] 고차함수(flatMap, compactMap, forEach, sorted) 2회차

magpiebros 2023. 4. 11. 19:44
반응형

안녕하세요

맥파이입니다.

 

1회차 고차함수를 보고 오셨나요?

2023.04.11 - [iOS SWIFT] - [Swift] 고차함수 (map, filter, reduce) 1회차

 

[Swift] 고차함수 (map, filter, reduce) 1회차

안녕하세요. 맥파이입니다. 오늘은 고차 함수에 대해 공부를 해보려고 합니다. 고차함수 Swift에서 고차 함수란, 다른 함수를 매개변수로 받거나 함수를 반환하는 함수를 말합니다. 함수를 다루

www.magpiebros.com

 

오늘은 2회차를 진행하겠습니다.

오늘은 flatMap부터 sorted까지 진행 예정입니다.

 

  • map: 배열의 모든 요소에 동일한 작업을 수행하고 새로운 배열을 반환합니다.
  • filter: 주어진 조건에 따라 배열의 요소를 필터링하여 새로운 배열을 반환합니다.
  • reduce: 배열의 모든 요소를 결합하여 하나의 값으로 만듭니다.
  • flatMap: 배열의 각 요소에 동일한 작업을 수행하고, 결과를 1차원 배열로 반환합니다.
  • compactMap: nil이 아닌 값으로 매핑되는 요소로 새로운 배열을 반환합니다.
  • forEach: 배열의 각 요소에 대해 지정된 작업을 수행합니다.
  • sorted: 배열의 요소를 지정된 순서로 정렬합니다.
  • contains: 배열이 특정 요소를 포함하는지 여부를 반환합니다.
  • allSatisfy: 배열의 모든 요소가 지정된 조건을 충족하는지 여부를 반환합니다.
  • first(where:): 지정된 조건을 충족하는 배열의 첫 번째 요소를 반환합니다.

 

자 시작합니다.


flatMap

flatMap은 배열에 대해 map 연산을 수행한 후, 이를 하나의 배열로 합쳐주는 고차 함수입니다. 이를 통해 배열의 중첩 구조를 해제할 수 있습니다.

다음은 flatMap의 선언입니다.

func flatMap<ElementOfResult>(_ transform: (Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult]

transform 클로저는 Element 타입의 요소를 받아 ElementOfResult 타입으로 변환합니다.

변환된 값이 nil일 경우, flatMap은 해당 요소를 제거합니다.

 


예를 들어, [1, 2, 3, 4, 5]라는 배열에서 각각의 요소에 대해 2를 곱한 후, 문자열로 변환하고, 마지막으로 하나의 문자열로 합쳐보겠습니다.

let numbers = [1, 2, 3, 4, 5]
let result = numbers.flatMap { (number) -> String? in
    let doubled = number * 2
    return doubled % 3 == 0 ? nil : String(doubled)
}
print(result) // 출력 결과: ["2", "4", "8", "10"]

flatMap 함수를 이용해 numbers 배열의 각 요소를 2배하고, 3의 배수인 경우는 nil을 반환하였습니다.

result 변수에는 문자열 배열 ["2", "4", "8", "10"]입니다. 

flatMap 함수를 사용하면 각 요소를 2배한 결과가 배열에 중첩되지 않고, 하나의 배열로 평탄화되었습니다.

평탄화가 뭔지 모르시겠죠?

다음 예제를 한번 확인해보시죠.


이차원 배열을 단일 배열로 평탄화할 때도 flatMap 함수를 사용할 수 있습니다.

let arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
let flattenedArr = arr.flatMap { $0 }
print(flattenedArr) // 출력 결과: [1, 2, 3, 4, 5, 6, 7, 8, 9]

flatMap 함수를 이용해 arr 배열의 중첩된 배열을 하나의 배열로 평탄화하였습니다.

단일 배열로 평탄화 되었습니다.

 

 

compactMap

map과 비슷하지만 더욱 강력한 기능을 제공합니다.

compactMap은 배열에서 nil이 아닌 값을 가진 새로운 배열을 만들 때 사용됩니다.

배열에서 숫자로 된 문자열을 가져와 숫자로 변환하려면 map 함수를 사용할 수 있습니다.

하지만 map 함수는 nil을 반환할 수도 있으므로, 배열의 요소 수가 줄어들 수 있습니다.

이때 compactMap 함수를 사용하면 nil 값이 제거된 새로운 배열을 반환합니다.

let stringArray = ["1", "2", "3", "four", "5"]
let integerArray = stringArray.compactMap { Int($0) }
print(integerArray) // 출력 결과: [1, 2, 3, 5]

compactMap 함수를 이용해 각 요소를 정수로 변환한 후, nil이 아닌 값을 가진 새로운 배열을 생성하였습니다.

[1, 2, 3, 5]와 같은 결과가 나옵니다.

compactMap 함수를 사용하여 옵셔널 값을 가진 배열을 정리할 수 있습니다. 

아래 예제에서 nil 값이 제거된 배열을 생성합니다.

let optionalArray: [Int?] = [1, 2, nil, 4, nil, 6]
let filteredArray = optionalArray.compactMap { $0 }
print(filteredArray) // 출력 결과: [1, 2, 4, 6]

compactMap 함수를 사용하여 각 요소를 nil이 아닌 값으로 변환한 후, nil 값을 가진 요소가 제거된 배열을 생성합니다.

보통은 여기까지를 고차함수라고 보시는 분들이 많습니다.

 

이제부터는 보통 다 알고 계시는것들에 대한 설명입니다.

 

forEach

배열의 모든 요소를 순회하면서 각 요소에 대해 작업을 수행할 때 사용됩니다.

forEach는 각 요소에 대해 일괄 처리를 수행하며, 새로운 배열을 반환하지 않습니다. 

let numbers = [1, 2, 3, 4, 5]
numbers.forEach { print($0) }

 forEach 함수를 사용하여 각 요소를 출력합니다.



 

sorted

sorted는 배열의 요소를 정렬하고 새로운 배열을 반환합니다.
sorted 함수는 오름차순으로 배열을 정렬합니다.

만약 내림차순으로 정렬하려면 sorted(by:) 메서드를 사용하면 됩니다.

 

let numbers = [5, 2, 7, 1, 9]
let sortedNumbers = numbers.sorted()
print(sortedNumbers) // [1, 2, 5, 7, 9]

sorted() 함수를 사용하여 numbers 배열을 정렬하면 오름차순으로 정렬된 [1, 2, 5, 7, 9] 배열이 반환됩니다.

 


이번에는 sorted(by:) 함수를 사용하여 내림차순으로 정렬하는 예제를 살펴보겠습니다.

let numbers = [5, 2, 7, 1, 9]
let descendingNumbers = numbers.sorted(by: >)
print(descendingNumbers) // [9, 7, 5, 2, 1]

sorted(by:) 함수를 사용하여 > 연산자를 이용해 요소를 비교하면 내림차순으로 정렬된 [9, 7, 5, 2, 1] 배열이 반환됩니다.

 

오늘은 여기까지 학습하겠습니다.

다음글이 궁금하면 아래 링크를 따라가 보시죠.

 

2023.04.12 - [분류 전체보기] - [Swift] 고차함수 (contains, allSatisfy, first(where:)) 3회차

 

[Swift] 고차함수 (contains, allSatisfy, first(where:)) 3회차

안녕하세요 맥파이입니다. 오늘은 고차 함수 나머지 것들에 대해 정리해보겠습니다. map: 배열의 모든 요소에 동일한 작업을 수행하고 새로운 배열을 반환합니다. filter: 주어진 조건에 따라 배열

www.magpiebros.com

 

 

또 만나요!!!

반응형