250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- swift ac
- 연속된 부분 수열의 합 투포인터
- ac swift 풀이
- swift 2xn 타일링
- swift ac 풀이
- swift 알고리즘
- ac 투포인터
- iOS Charts
- 123 더하기 풀이
- MVVM
- 1 2 3 더하기 풀이
- swift 9095 풀이
- swift 프로그래머스
- 연속된 부분 수열의 합 swift
- swift codility
- swift 연속된 부분 수열의 합
- swift
- rxswift
- swift 백준 9095
- ios
- swift 2xn 타일링 풀이
- swift 연속된 부분 수열의 합 풀이
- swift algorithm
- swift dfs
- 백준 2xn 타일링
- ac 구현 풀이
- 백준 2xn 타일링 풀이
- swift gRPC
- swift ac 문제풀이
- swift 2xn 타일링 백준
Archives
- Today
- Total
boraBong
[Swift] Swift 고차함수 문법 - Map, Filter, Reduce 본문
728x90
✅ map
- 클로저로 각 항목들을 반영한 결과물을 가진 새로운 배열을 반환합니다.
// Declaration
func map<U>(transform: (T) -> U) -> Array<U>
[x1, x2, ... xn].map(f) -> [f(x1), f(x2), ... , f(xn)]
// transform을 지원하는 클로저는 변경된 값을 반환하기 위해 해당 타입의 값을 반환해야 합니다.
// 다음은 [1, 2, 3, 4]인 배열에서 2씩 곱한 배열을 얻는 예제입니다.
let array = [0, 1, 2, 3]
let multipliedArray = array.map( { (value: Int) -> Int in return value * 2 } )
// [2, 4, 6, 8]
// map에서도 추론하여 코드를 생략할 수 있습니다. 우선, value의 타입 Int와 return 키워드는 추론을 통해 생략 가능합니다.
array.map( { (value) -> Int in value * 2 } )
// -> Int도 생략 가능합니다.
array.map( {value in value * 2 } )
// value는 여러번 사용하므로 $0으로 축약할 수 있습니다.
array.map( {$0 * 2} )
// 또한, 괄호도 생략 가능합니다.
array.map { $0 * 2 }
// 만약 값에 문자열 “Number : “를 붙인다면 다음과 같이 사용할 수 있습니다.
array.map{ "Number : \($0)" }
// ✅ 사용 예제
// Character형으로 변환된 result를 Map을 사용하여 String형 배열로 변환!
result.sorted(by: >).map({ String($0 )})
✅ Filter
- 주어진 술어를 만족하는 시퀀스의 요소를 순서대로 포함하는 배열을 반환합니다.
- 클로저로 각 항목들을 비교하여 일치하는 결과물을 가진 새로운 배열을 반환합니다.
func filter(_ isIncluded: (Self.Element) throws -> Bool) rethrows -> [Self.Element]
// * isIncluded를 allow(만족)하는 요소들의 집합을 return한다.
// ✅ 사용 예제
// win_nums: [Int], lottos: [Int]
// win_nums 중에서 lottos에 포함된 것들만 필터링하여 배열을 반환
win_nums.filter({ lottos.contains($0) })
✅ Reduce
- 주어진 클로저를 사용하여 시퀀스의 요소를 결합한 결과를 반환합니다.
- 배열의 각 항목들을 재귀적으로 클로저를 적용시켜 하나의 값을 만듭니다.
- 연산자는 중위 연산자로 왼쪽 값이 $0, 오른쪽 값이 $1임을 추론 가능하므로 다음과 같이 생략 가능합니다.
- array.reduce( 0, + )
- 시간복잡도: O(n), where n is the length of the sequence.
// Declaration
func reduce<U>(initial: U, combine: (U, T) -> U) -> U
array.reduce(0, { (s1: Int, s2: Int) -> Int in
return s1 + s2
})
// 클로저는 함수의 마지막에 위치하면 다른 인자와 분리하여 작성할 수 있습니다.
array.reduce(0) { (s1: Int, s2: Int) -> Int in
return s1 + s2
}
// 위 코드에서 s1, s2의 타입은 추론하므로 생략 가능합니다.
array.reduce(0) { (s1, s2) in s1 + s2 }
// s1과 s2는 $0, $1로 대신하여 사용할 수 있습니다.
array.reduce(0) { $0 + $1 }
// ✅ 사용 예제
let numbers: [Int] = [1, 2, 3, 4, 5]
return (0...9).filter { !numbers.contains($0) }.reduce(0) { $0 + $1 } // 결과: 30
// 생략
return (0...9).filter { !numbers.contains($0) }.reduce(0, +)
출처
https://developer.apple.com/documentation/swift/array/map(_:)-87c4d
https://minsone.github.io/mac/ios/swift-map-filter-reduce-and-inference
https://developer.apple.com/documentation/swift/array/reduce(_:_:)
https://developer.apple.com/documentation/swift/sequence/filter(_:)
반응형
'iOS > Swift' 카테고리의 다른 글
[Swift] Regex, 정규표현식 사용하기 (0) | 2023.02.22 |
---|---|
[Swift] 구조체와 클래스 (1) | 2022.04.15 |
[Swift] 함수형 프로그래밍이란? (0) | 2020.12.08 |
Comments