본문 바로가기

# 02/Swift

[Swift] 고차함수

반응형

전달인자로 함수를 전달받거나 함수 실행의 결과를 함수로 반환하는 함수


map, filter, reduce







// map


// 컨테이너 내부의 기존 데이터를 변형(transform)하여 새로운 컨테이너 생성


let numbers: [Int] = [0, 1, 2, 3, 4]


var doubledNumbers: [Int]


var strings: [String]





// for 구문 사용


doubledNumbers = [Int]()


strings = [String]()


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배하여 새로운 배열 반환


doubleNumbers = 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(doubleNumbers)    // [0, 2, 4, 6, 8]







// filter


// 컨테이너 내부의 값을 걸러서 새로운 컨테이너로 추출


// for 구문 사용 - 변수 사용에 주목!!


var filtered: [Int] = [Int]()


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 }






// reduce


// 컨테이너 내부의 콘텐츠를 하나로 통합


let someNumbers: [Int] = [2, 8, 15]



// for 구문 사용 - 변수 사용에 주목!!


var result: Int = 0



// someNumbers 의 모든 요소를 더한다.


for number in someNumbers {

result += number

}


print(result)    // 25



// reduce 메서드 사용


// 초깃값이 0 이고 someNumbers 내부의 모든 값을 더한다.


let sum: Int = someNumbers.reduce(0, {


(first: Int, second: Int) -> Int in


return first + second

})


print(sum)    // 25




// 초깃값이 0 이고 someNumbers 내부의 모든 값을 뺀다.


var subtract: Int = someNumbers.reduce(0, {

(first: Int, second: Int) -> Int in


return first - second

})


print(subtract)    // -25




// 초깃값이 3 이고 someNumbers 내부의 모든 값을 더한다.


let sumFromThree: someNumbers.reduce(3, { $0 + $1 } 



print(sumFromThree)    // 28





반응형

'# 02 > Swift' 카테고리의 다른 글

[Swift] Dictionary  (0) 2022.11.20
[Swift] 주석, 타입 별칭, 튜플  (0) 2020.06.05
[Swift] 오류처리  (0) 2020.06.05
[Swift] 익스텐션  (0) 2020.06.05
[Swift] 프로토콜  (0) 2020.06.05