728x90
순서
고차함수
map
filter
reduce
고차함수(higher-order function)
고차함수란 다른함수를 매개변수로 받거나 실행결과를 함수로 반환하는 함수
즉, 1급객체인 Swift의 함수는 고차함수를 구현할 수 있습니다
대표적인 고차함수로 map, filter, reduce 가 있습니다
map
Array의 map메서드를 예시로 들어보겠습니다
func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]
|
cs |
형태를 보니 함수를 매개변수로 받고 다시 다시 리턴하는 것 같습니다
컨테이너(배열)가 가진 값을 매개변수(클로저)에 전달하여 새로운 컨테이너를 생성해 반환합니다
arr 배열의 각 요소*10된 값을 myInt배열에 넣는 코드입니다
배열을 먼저 선언하고 for문 변수를 정하는 등 번거러운 사전작업이 필요합니다
var arr = [1,2,3,4]
var myInt = [Int]()
var myString = [String]() for index in arr.indices {
myInt.append(arr[index] * 10)
myString.append("\(arr[index])") }
print(myInt) // [10,20,30,40]
print(myString) // ["1","2","3","4"] |
cs |
map() 메서드를 이용하면 좀 더 깔끔한 코드로 작성할 수 있습니다
arr의 요소를 Int형 number로 받아 number* 10 (Int)값을 리턴합니다
이 때 arr값은 전혀 영향을 받지 않습니다
var arr = [1,2,3,4]
var myInt = arr.map( { (number:Int) -> Int in
return number * 10
})
var myString = arr.map({ (number:Int) -> String in
return "\(number)"
})
print(myInt) // [10,20,30,40]
print(myString)// ["1","2","3","4"]
|
cs |
매개변수, 리턴형, return키워드를 생략하고
후행클로저를 이용하면 더 간단하게 바꿀 수 있습니다
var arr = [1,2,3,4]
var myInt = [Int]()
var myString = [String]()
myInt = arr.map{ $0 * 10}
myString = arr.map{ "\($0)"}
print(myInt) // [10,20,30,40]
print(myString)// ["1","2","3","4"]
print(myInt) // Array<Int> print(myString)//Array<String> |
cs |
•CompactMap
map과 동일하지만 nil을 반환하지 않고 언래핑한 값을 반환합니다
var arr = [1,nil,3,4]
var map = arr.map{ $0 }
var cMap = arr.compactMap{ $0 }
print(map) //[Optional(0),nil,Optional(3),Optional(4)]
print(cMap) //[1,3,4]
|
cs |
filter
조건식에 부합하는 값만 추출해 반환합니다
이번에는 축약식만 사용해 표현해 보겠습니다
var arr = ["손","어깨","허리","팔꿈치"]
var filter = arr.filter{ $0.count == 2 }
print(filter) //["어깨", "허리"]
|
cs |
아래 조건식에 부합하는 요소만 반환되었습니다
reduce
컨테이너 내부의 값을 하나로 통합해 리턴합니다
var arr = ["손","1","A","52,1","팔꿈치"]
var result1 = arr.joined()
print(result1)//손1A52.1팔꿈치
var result2 = arr.reduce("결과=", {$0 + $1})
print(result2)//결과=손1A52.1팔꿈치
var result3 = arr.reduce("결과->") {$0 + $1}
print(result3)//결과->손1A52.1팔꿈치
|
cs |
참고자료
한성현 교수님의 유튜브 강의
https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA
728x90
'🍎iOS프로그래밍 > 겨울방학 특강' 카테고리의 다른 글
Swift - 뷰컨트롤러간 데이터 이동 (2) | 2022.01.20 |
---|---|
Swift-프로토콜과 델리게이트 (0) | 2022.01.14 |
Swift문법 - 배열 Array (0) | 2022.01.09 |
Swift문법 - Generic (0) | 2022.01.08 |
Swift문법 - error handling (0) | 2022.01.08 |
댓글