Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Stacking Fire

Swift 15. 맵, 필터, 그리고 리듀스 본문

개발/Objective-C -> Swift

Swift 15. 맵, 필터, 그리고 리듀스

라우비 2017. 8. 12. 22:19

map, filter, reduce는 객체에 데이터를 보내서 받는 전통적인 형태의 함수가 아닙니다. 클로저로 다른 함수를 받아 데이터셋을 변형시키는 고차 함수입니다. 옵저빙 프로퍼티와 함께 함수형 프로그래밍 '스러운' 기능을 지원하는 것입니다.


아래는 단순히 사용법이지만, 체인처럼 걸어서 사용할 수 있습니다.

  • for-in처럼 각 요소에 특정한 행동을 수행해준 후에 그 각각 처리된 요소를 이용한 컬렉션을 만들어줍니다. 반환하지 않는 클로저를 전달하면 그냥 반복문으로 사용 가능.
//긴 버전
var doubled: [Int] = numbers.map { (i: Int) -> Int in
    return i * 2
}
print(doubled)

//짧은 버전
var dbld: [Int] = numbers.map { $0 * 2 }
print(dbld)

필터

  • for-in처럼 각각 해주되, Bool값을 반환하면, false인 것들을 뺀 상태의 새로운 컬렉션을 반환해 줍니다.
//긴 버전
let evens: [Int] = numbers.filter { (i: Int) -> Bool in
    i % 2 == 0
}
print(evens)

//짧은 버전
let evn: [Int] = numbers.filter { $0 / 2 == 0 }
print(evn)

리듀스

  • 하나의 결과값을 두고, 거기에 계속 반복된 작업을 해 줍니다. 마지막엔 결과값만 반환합니다.
//긴 버전
var reduced: Int = evens.reduce(0) { (result: Int, i: Int) -> Int in
    return result + i
}
print(reduced)

//짧은 버전
var rdcd: Int = evens.reduce(0) { $0 + $1 }
print(rdcd)


'개발 > Objective-C -> Swift' 카테고리의 다른 글

Swift 16. 모나드  (0) 2017.08.14
Swift 14. 옵셔널 체이닝, 그리고 빠른 종료  (0) 2017.08.10
Swift 13. 클로저  (0) 2017.07.12
Swift 12. 접근제어  (0) 2017.07.10
Swift 11. 이니셜라이저  (0) 2017.07.03
Comments