Map 함수
Swift의 'map' 함수는 배열 또는 시퀀스의 각 요소에 대해 특정 변환(매핑)을 수행하여 새로운 배열을 생성한다.
'map' 함수의 기본 구조는 다음과 같다.
1. Apple Developer 공식 홈페이지 map 함수 예제
func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]
코드를 살펴보면 먼저,
- 'transform' 는 각 요소에 대해 수행할 변환을 나타내는 클로저이다. 이 콜로저는 현재 배열의 요소 'Element'를 입력으로 받아 원하는 타입 'T'의 값을 반환한다.
- 'rethrows' 키워드는 'transform' 클로저가 에러를 던질 수 있음을 나타낸다. 'map' 함수는 클로저에서 발생한 에러를 전파할 수 있다.
음, 아직 잘 모르겠다 예제를 만들어보자.
※ 정수 배열 numbers에 다음과 같은 값이 들어있을 때 [1, 2, 3, 4, 5] 각 요소를 제곱하여 값을 출력해보시오.
let numbers = [1, 2, 3, 4, 5] //numbers에 배열값을 넣고,
let squaredNumbers = numbers.map { $0 * $0 } // squaredNumbers에 numbers.map을 써서 제곱을 해준다
print(squaredNumbers) // [1, 4, 9, 16, 25] // 값을 출력하면 다음과 같다.
위 코드에서 { $0 * $0 }는 각 요소를 제곱하는 클로저이다. 'map' 함수는 이 클로저를 배열 'numbers'의 각 요소에 적용하여 새로운 배열 'squaredNumbers'를 생성한다.
Filter 함수
'filter' 함수는 Swift에서 배열이나 시퀀스의 요소를 걸러내어 새로운 배열을 생성하는 함수이다. 이 함수는 주어진 조건을 만족하는 요소만을 포함하는 새로운 배열을 반환한다.
filter 함수의 기본 구조는 다음과 같다.
func filter(_ isIncluded: (Element) throws -> Bool) rethrows -> [Element]
코드를 살펴보면 먼저,
- 'isIncluded'는 각 요소가 포함될지 여부를 결정하는 조건을 나타내는 클로저이다. 이 클로저는 현재 배열의 요소 'Element'를 입력으로 받아 'Bool' 값을 반환한다. 'true'를 반환하면 해당 요소가 결과 배열에 포함되고, 'false'를 반환하면 결과 배열에 포함되지 않는다.
- 'rethrows' 키워드는 'isIncluded' 클로저가 에러를 던질 수 있음을 나타낸다. 'filter' 함수는 클로저에서 발생한 에러를 전파할 수 있다.
음음,,, 이것도 역시 아직 잘 모르겠다. 예제를 만들어보자
※ 정수 배열 numbers에 다음과 같은 값이 들어있을 때 [1, 2, 3, 4, 5] 각 요소가 짝수인 경우에만 값을 출력하시오.
let numbers = [1, 2, 3, 4, 5]
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers) // [2, 4]
위 코드에서 { $0 % 2 == 0}은 각 요소가 짝수인지를 확인하는 클로저이다. 'filter' 함수는 이 클로저를 배열 'numbers'의 각 요소에 적용하여 조건을 만족하는 요소만을 포함하는 새로운 배열 'evenNumbers'를 생성한다.
'filter' 함수는 배열 뿐만 아니라 모든 시퀀스 타입에 대해 사용할 수 있다. 'map'과 함께 사용하면 요소를 변환하고 걸러내어 원하는 형태로 데이터를 처리할 수 있다.
reduce함수
'reduce' 함수는 Swift에서 배열이나 시퀀스의 모든 요소를 결합하여 단일 값으로 만드는 함수이다. 이 함수는 반복적으로 요소를 결합하여 최종 결과를 생성한다.
reduce의 기본 구조는 다음과 같다.
func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result
코드를 살펴보면,
- 'initialResult'는 초기 결과 값으로 사용 될 값이다. 이 값은 결합 과정의 첫 번째 반복에서 사용된다.
- 'nextPartialResult'는 현재 결과 값'Result'와 각 요소 'Element'를 받아서 새로운 결과값을 생성하는 클로저이다. 이클로저는 각 요소를 처리할 때마다 호출되어 현재 결과를 업데이트 한다.
- 'rethrow' 키워드는 'nextPartialResult' 클로저가 에러를 던질 수 있음을 나타낸다.'reduce' 함수는 클로저에서 발생한 에러를 전파할 수 있다.
음음음,, 이것도 설명만 들어선 잘 모르겠다.. 예제를 만들어 보자!
※ 정수 배열 numbers에 다음과 같은 값이 들어있을 때[1, 2, 3, 4, 5] 배열의 모든 요소의 합을 구해보시오.
let numbers = [1, 2, 3, 4, 5]
let sum = numbers.reduce(0) { (result, element) in
return result + element
}
print(sum) // 15
위 코드에서 'reduce(0)'은 초기 결과 값으로 '0'을 사용하고 클로저 { (result, element) in return result + element} 는 각 요소를 받아서 현재 결과 'result'와 요소'element'를 더하여 새로운 결과를 반환한다.
--------------------------- 5/23 내가 볼려고 예제만듬
'Swift' 카테고리의 다른 글
내가 볼려고 만든 SOLID정리 (0) | 2024.06.07 |
---|---|
문법 기초 공부 (객체 지향) (1) | 2024.06.05 |
문법 기초 공부 (배열, 집합, 딕셔너리) 미완 (1) | 2024.06.05 |
문법 기초 공부 (스택&큐) (0) | 2024.06.05 |
문법 기초 공부 (0) | 2024.06.03 |