Swift 고차함수(2020.11.3)

K S Michael·2020년 11월 3일

swift TIL

목록 보기
22/29

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

map, filter, reduce

map

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

let numbers: [Int] = [0,1,2,3,4]
var doubleNumbers: [Int]
var strings: [String]

### for 구문 사용
doubledNumbers = [Int]()
strings = [String]()

for number in numbers {
	doubledNumbers.append(nuber * 2)
    strings.append("\(number)")
}

print(doubledNumbers) // [0, 2, 4, 6, 8]
print(strings) // ["0", "1", "2", "3", "4"]

map 메서드 사용

numbers의 각요소를 2배하여 새로운 배열 반환

// numbers 의 각 요소를 2배하여 새로운 배열 반환
doubledNumbers = 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(doubledNumbers)// [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의 요소 중 짝수를 걸러내어 새로운 배열로 반환
// 변수 filtered 는 var 키워드로 변경이 가능하다
// filter 메서드를 사용하면 변경이 불가능한 let 키워드로 선언한 배열로 가져올수 있다.
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 }

print(oddNumbers)// [1, 3]

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

// 모든 값의 곱한 값
print (someNumbers.reduce(1){ $0 * $1 }) //240

// 모든 값의 초기값이 0 이라면 결과는 0이 나올것이다.
print (someNumbers.reduce(0){ $0 * $1 }) // 0

profile
차근차근

0개의 댓글