다른 함수를 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수
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
깔끔한 정리 감사합니다!