SMALL
고차함수
다른 함수를 인자로 받거나,
함수의 결과로 함수를 반환하는 함수
map
map 함수는 컬렉션 내부의 기존 데이터를 변형(transform)하여 새로운 컬렉션를 생성
기존의 컬렉션의 요소에 대해 정의한 익명함수로 매핑한 결과를 새로운 컬렉션으로 반환
// map 함수 예시
// for 문으로 구현
let num = ["1", "2", "3", "4", "5"]
var numberArray: [Int] = []
for index in num {
if let changeToInt = Int(index) {
numberArray.append(changeToInt)
}
}
print(numberArray)
// [1, 2, 3, 4, 5]
// map으로 구현
let stringArray = ["1", "2", "3", "4", "5"]
numberArray = stringArray.map {
if let changeToInt = Int($0) {
return changeToInt
}
return 0
}
/*
$0와 $1
{ } 를 익명함수인 클로저라고 합니다.
클로저의 매개변수 이름이 필요하지 않은 경우 단축 인자 이름을 활용할 수 있습니다.($0, $1)
단축 인자이름은 순서대로 $0 , $1 , $2, $3 ...으로 표현합니다.
$0 은 첫번째 인자, $1은 두번째 인자를 뜻합니다.
*/
print(numberArray)
// [1, 2, 3, 4, 5]
filter
기존 컨테이너의 요소 중 조건에 만족하는 값에 대해 새로운 컨테이너를 만들어 반환
// filter 함수 예시
// for 문으로 구현
// numbers에서 짝수만 추출하기
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var evenNumbers: [Int] = [] // 짝수를 빈 배열에 다 담을 예정
for number in numbers {
if number % 2 == 0 { // 나머지가 0일 때 number를 evenNumbers에 담아주는 형식
evenNumbers.append(number)
}
}
print(evenNumbers)
// [2, 4, 6, 8]
// filter로 구현
// numbers에서 짝수만 추출하기
let numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
let evenNumbers2 = numbers1.filter { $0 % 2 == 0 } // $0에는 각각의 number들이 들어오며 numbers1에 넣은 값들이 들어옴, 그 안에서 나머지가 0인것을 Bool값이 리턴이되어 ture는 담기며 false이면 되는 형태로 진행
print(evenNumbers2)
// [2, 4, 6, 8]
reduce
기존의 컨테이너의 요소에 대해 정의한 클로저로 매핑한 결과를 새로운 컨테이너로 반환
// reduce 함수 예시
// for 문으로 구현
// 각 요소의 합 구하기
let numbers2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var sum = 0
for number in numbers2 {
sum += number
}
print(sum)
// 55
// reduce로 구현
// 표현식1
// 각 요소의 합 구하기
let numbers3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let sum1 = numbers3.reduce(0, +) // reduce 앞에 있는 0의 파라미터는 초기값 입니다. "ar sum = 0"과 동일한 값이다 라고 보면 됩니다.
print(sum1)
// 55
//표현식2
// 각 요소의 합 구하기
let numbers4 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
/*
reduce는 내부 클로저를 통해서 진행이 가능합니다.
1부터 10까지의 배열이 있습니다.
reduce(0)이라는 초기값을 주고 트레일링 클로저로 연결이 가능합니다.
$0 = 첫번째 파라미터, $1 = 두번째 파라미터를 의미합니다.
그렇다면 1이 들어올 때 첫번째 파라미터는 초기값이 들어옵니다.
첫경우에만 초기값이 들어오고, 2번째 파라미터가 1이 들어오는 방식입니다.
그래서 두개를 더하면 { $0 + $1 } = 1이 되어서 reduce(0)요기가 1이 됩니다.
즉, 초기값 자체가 reduce(1) 이런식으로 세팅이 되어 있는 것 입니다.
이상태에서 다시 첫번째 파라미터로 1이 들어오고 두번째 파라미터로 2가 들어오는 구조가 됩니다.
그래서 1더하기 2가 3이 되고 또 3이 첫번째 파라미터로 다시 들어가고 3이 두번째 파라미터로 다시 들어갑니다.
*/
let sum2 = numbers4.reduce(0) { $0 + $1 }
print(sum2)
// 55
728x90
'IOS > Swift-Study' 카테고리의 다른 글
[Swift-Study] 심화 문법종합반 2주차 4일차 정리 - ARC와 메모리 누수 (0) | 2024.03.26 |
---|---|
[Swift-Study] 심화 문법종합반 2주차 3일차 정리 - 예외처리 (0) | 2024.03.25 |
[Swift-Study] 심화 문법종합반 2주차 2일차 정리 - 클로저 (0) | 2024.03.22 |
[Swift-Study] 심화 문법종합반 2주차 2일차 정리 - 접근제한자 (0) | 2024.03.12 |
[Swift-Study] 심화 문법종합반 2주차 1일차 정리 - 타입 캐스팅 (0) | 2024.03.12 |