Swift

Swift)고차함수 filter

나태한개발 2024. 5. 10. 19:40

저번 map 함수에 이어 filter 함수에 대해서 정리 해 볼까 한다.

 

filter 기본형태

array.filter(isIncluded: T throws -> T)

 

filter 함수는 조건에 맞는 값들을 걸러 반환한다.

조건달린 map인거 같다.

 

filter 사용 예시

let arr1: [Int] = [1, 2, 3, 4, 5]
var arr2: [Int] = []

for num in arr1 {
	if num%2 == 0 {
    	arr2.append(num)
    }
}

print(arr2) //[2,4]

for 문을 사용하여 짝수인 값만 걸러내는 코드

 

이것을 filter 함수를 이용하면

let arr1: [Int] = [1, 2, 3, 4, 5]
var arr2: [Int] = arr1.filter{ $0%2 == 0 }

print(arr2) //[2,4]

 

이렇게 간단하게 줄일수 있다.

 

이 축약 표현도 풀어서 보면

let arr1: [Int] = [1, 2, 3, 4, 5]
var arr2 = arr1.filter({ (num: Int) -> Bool in
	return num%2 == 0 //true, false
})
/*이렇게 된것을 축약한 것인데 함수에 파라미터가 클로저 하나일 경우 ()를 생략 할수 있다.*/

arr1.filter{ (num: Int) -> Bool in 
	return num%2 == 0
} //()생략

/*파라미형식과 리턴형식도 생략할수 있다.*/

arr1.filter{ (num) in 
	return num%2 == 0
} //파라미터형식, 리턴형식 생략

/*파라미터를 인자 이름 축약(Shorthand Arguments Names)을 통하여 
$0표시를 통해 간단하게 표현할수 있다.*/

arr1.filter{
	return $0%2 == 0
} //파라미터와 in 을 생략해도 된다.

/*마지막으로 리턴문만 남았을 경우 그것마저 생략할수 있다.*/

arr1.filter{ $0%2 == 0 } //filter 함수의 가장 간단한 형태