다른 함수를 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수
map, filter, reduce 함수는 스위프트 표준 라이브러리의 컨테이너 타입
Array, Set, Dictionary 등에 구현되어있다.
컬렉션 내부의 기존 데이터를 변형해서 새로운 컬렉션을 생성한다.
let numbers: [Int] = [0, 1, 2, 3, 4]
var doubledNumbers = [Int]()
var strings = [String]()
// for구문 사용
for number in numbers {
doubledNumbers.append(number * 2)
strings.append("\(number)")
}
print(doubledNumbers) // 출력값: [0, 2, 4, 6, 8]
print(strings) // 출력값: ["0", "1", "2", "3", "4"]
// map 메서드 사용
// numbers의 각 요소를 2배하여 새로운 배열 반환
doubledNumbers = numbers.map({ (number: Int) -> Int in
return number * 2
})
// numbers의 각 요소를 문자열로 변환하여 새로운 배열 반환
strings = numbers.map({ (number: Int) -> String in
return "\(number)"
})
print(doubledNumbers) // 출력값: [0, 2, 4, 6, 8]
print(strings) // 출력값: ["0", "1", "2", "3", "4"]
// 매개변수, 반환 타입, 반환 키워드(return) 생략, 후행 클로저
doubledNumbers = numbers.map { $0 * 2 }
print(doubledNumbers) // [0, 2, 4, 6, 8]
let stringArray = ["1", "2", "3", "4", "5"]
numberArray = stringArray.map { Int($0)! }
print(numberArray) // 출력값: [1, 2, 3, 4, 5]
기존 컨테이너의 요소 중 조건에 만족하는 값에 대해 새로운 컨테이너를 만들어 반환한다.
var filtered: [Int] = [Int]()
// for구문 사용
for number in numbers {
if number % 2 == 0 {
filtered.append(number)
}
}
print(filtered) // 출력값: [0, 2, 4]
// filter 메서드 사용
// numbers의 요소 중 짝수를 걸러내어 새로운 배열로 반환
let evenNumbers: [Int] = numbers.filter { (number: Int) -> Bool in
return number % 2 == 0
}
print(evenNumbers) // 출력값: [0, 2, 4]
// 매개변수, 반환 타입, 반환 키워드(return) 생략, 후행 클로저
let oddNumbers: [Int] = numbers.filter {
$0 % 2 != 0
}
print(oddNumbers) // 출력값: [1, 3]
기존의 컨테이너의 요소에 대해 정의한 클로저로 매핑한 결과를 새로운 컨테이너로 반환한다.
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var sum = 0
// for 구문 사용
for number in numbers {
sum += number
}
print(sum) // 출력값: 55
// reduce 메서드 사용
// 1번째 표현식
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let sum = numbers.reduce(0, +)
print(sum) // 출력값: 55
// 2번째 표현식
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let sum = numbers.reduce(0) { $0 + $1 }
print(sum) // 출력값: 55
깔끔한 정리 감사합니다!