Swift) forEach, filter, reduce

Havi·2021년 2월 7일
0

Swift기초

목록 보기
18/19
/**
 `고차 함수`
 - 함수를 매개변수로 받는 함수
 - 함수를 반환 값으로 사용하는 함수
 - 대표적으로 map, filter, reduce가 있다.
 */

/**
 `forEach`
 - for-in 과의 차이점:
 - for-in은 break, continue를 사용해 빠져ㅑ나올 수 있고, return을 사용하면 에러
 - forEach의 경우 return을 사용해야 빠져나갈 수 있고, break, continue를 사용하면 에러
 */
 /*구현체
 func forEach(_ body: (Int) throws -> Void) rethrows
 */

//-------[for-in]-------
let array = [1,2,3,4,5]

for num in array {
    if num == 2 {
        break
    }
    print(num)
}
<출력>
//1

for num in array {
    if num == 2 {
        continue
    }
    print(num)
}
<출력>
//1
//3
//4
//5

// <오류>
for num in array {
    if num == 2 {
        return // 에러
    }
    print(num)
}


//-------[forEach]-------

array.forEach {
    if $0 == 2 {
        return
    }
    print($0)
}
<출력>
//1
//3
//4
//5

// <오류>
array.forEach {
    if $0 == 2 {
        //break or continue 사용 불가
    }
    print($0)
}

/**
 `Filter`
 - 컨테이너 내부의 값을 걸러서 추출
 - filter를 매개 변수로 전달되는 함수의 반환 타입은 Bool
 */
 /* 구현체
 func filter(_ isIncluded: (String) throws -> Bool) rethrows -> [String]
*/

print(numbers.filter({(num) -> Bool in
    num % 2 == 0
})) // prints [0, 2, 4]

print(numbers.filter{ $0 % 2 == 0 })

/**
 `reduce`
 - 컨테이너의 내부를 하나로 합쳐주는 기능
 - 정수 배열이면 함수의 연산 결과로, 문자열이면 문자로 합쳐준다.
 - 초깃값을 지정할 수 있다.
 */
 /*구현체
 func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Int) throws -> Result) rethrows -> Result
*/

print(numbers.reduce(10, { (result: Int, current: Int) -> Int in
    return result + current
})) // 10 + 0 + 1 + 2 + 3 + 4 + 5 = 25

let abc = ["a", "b", "c", "d"]

print(abc.reduce(""){
    $0 + $1
}) // prints "abcd"
profile
iOS Developer

0개의 댓글