관리 메뉴

don't stop believing

Filter 사용하기 본문

Swift/Basic

Filter 사용하기

Tongchun 2018. 2. 19. 15:07

Filter는 말 그대로 컨테이너 내부의 값을 걸러서 추출하는 역할을 하는 고차함수입니다. Map과 마찬가지로 새로운 컨테이너에 값을 담아 반환해 줍니다. 다만 Map처럼 기존 콘텐츠를 변형하는 것이 아니라, 특정 조건에 맞게 걸러내는 역할을 할 수 있는 점이 다릅니다.


Filter 함수의 매개변수로 전달되는 함수의 반환 타입은 Bool입니다. 해당 콘텐츠의 값을 갖고 새로운 컨테이너에 포함될 항목이라고 판단하면 true를, 포함되지 않으려면 false를 반환해주면 됩니다.

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

// 기본 closure 표현식 사용
let evenNumbers: [Int] = numbers.filter({ (number: Int) -> Bool in
    return number % 2 == 0
})
print(evenNumbers)  // [0, 2, 4]

// closure의 간략화
let oddNumbers: [Int] = numbers.filter { $0 % 2 != 0 }
print(oddNumbers)   // [1, 3, 5]

만약 콘텐츠의 변형 후에 필터링하고 싶다면 아래 코드처럼 Map 사용 후에 Filter 메서드를 호출하면 됩니다.

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

// map 사용해 컨텐츠 변경
let mappedNumbers: [Int] = numbers.map { $0 + 3 }
print(mappedNumbers)    // [3, 4, 5, 6, 7, 8]

// map 사용 후 filter 사용
let evenNumber: [Int] = mappedNumbers.filter { (number: Int) -> Bool in
    return number % 2 == 0
}
print(evenNumber)   // [4, 6, 8]

// map과 filter를 동시에 사용
let oddNumber: [Int] = numbers.map { $0 + 3 }.filter {$0 % 2 != 0 }
print(oddNumber)    // [3, 5, 7]

위 코드처럼 Map과 Filter를 연결하여 사용하면 복잡한 연산도 손쉽게 실행할 수 있습니다.


'Swift > Basic' 카테고리의 다른 글

Reduce 사용하기  (0) 2018.02.19
Filter 사용하기  (0) 2018.02.19
Map 사용하기  (0) 2018.02.19
탈출 클로저 @escaping  (0) 2018.01.31
defer (후처리)  (0) 2018.01.24
Swift Access Control  (0) 2018.01.19
0 Comments
댓글쓰기 폼