반응형
스위프트에는 함수형 프로그래밍에서 많이 사용하는 Map, Filter, Reduce를 사용할 수 있다.
세가지 컬렉션은 주로 배열의 요소들을 쉽게 접근 및 연산할때 많이 사용한다. 또한 참조한 배열의 값들을 직접 건드리는 일 없이 오로지 값 복사를 통해 새로운 배열을 반환하기 때문에 비동기처리에도 안전하게 사용할 수 있다.
1. map
먼저 맵 같은 경우에는 각 요소들을 접근하여 연산 처리를 할 때 주로 쓰인다.
let numbers: [Int] = [0,1,2,3,4,5,6,7,8,9,10]
let mappedNumbers = numbers.map { (myElement : Int) -> Int in
return myElement * 10
}
print(mappedNumbers)
// [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
여기서 myElement는 numbers의 각 요소들이며 각각 X 10 연산한 결과값을 mappedNumbers 배열에 append 해준다.
2. filter
필터는 말 그대로 조건에 부합한지 판단한지 확인하여 필터링한다. 반환값은 Bool로 지정되어 있으며 조건에 부합하면 true를 반환하여 새로운 배열에 요소를 추가해준다.
let numbers : [Int] = [0,1,2,3,4,5,6,7,8,9,10]
let filteredNumbers = numbers.filter { (number : Int) -> Bool in
return number % 2 == 0
}
print(filteredNumbers)
// 0, 2, 4, 6, 8, 10
3. reduce
리듀스는 영어로 줄이다라는 뜻인데 네이밍이 조금 잘못된거같다. 초기값을 사용한다는 면에서 줄이다보단 합치다?가 맞지않을까 싶다.
// reduce Ver 1
let numbers = [0,1,2,3,4,5,6,7,8,9,10]
let subRactNumbers = numbers.reduce(10, { (result, next) -> Int in
return result - next
})
print(subRactNumbers)
// 10은 초기값이므로 처음에는 result에 10이 세팅된다
// next는 numbers의 각 요소들을 뜻한다.
// reduce Ver 2
let numbers2 = [4, 5, 6]
let doubleNumbers = numbers.reduce(into: [1, 2, 3], { (result: inout [Int], next : int) in
if next % 2 == 1 {
return
}
result.append(next * 2)
})
print(doubleNumbers)
// 1,2,3,10
// into: [1,2,3]은 배열의 초기값을 뜻한다.
// result는 새로운 배열을 뜻한다.
// next는 numbers2의 각 요소들을 뜻한다
반응형
'Language > Swift' 카테고리의 다른 글
Swift 클로저 (0) | 2020.07.17 |
---|---|
Swift 구조체와 클래스의 차이 (0) | 2020.07.16 |