Filter
Coddy Swift 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 24번째.
filter는 서술어 클로저(predicate closure)를 인자로 받아, 클로저가 true를 반환하는 요소들만 포함하는 새로운 배열을 반환합니다.
let nums = [1, 2, 3, 4, 5, 6]
let evens = nums.filter { $0 % 2 == 0 }
print(evens) // [2, 4, 6]결과는 원래의 순서를 유지합니다. 결과 타입은 입력 타입과 일치하며, 변환은 일어나지 않고 선택만 수행됩니다.
filter는 map과 자연스럽게 연결됩니다:
let big = nums
.filter { $0 > 2 }
.map { $0 * $0 }
print(big) // [9, 16, 25, 36]각 체인을 파이프라인처럼 위에서 아래로 읽으세요. 각 단계는 새로운 배열을 생성하며, 원본은 아무것도 수정하지 않습니다.
챌린지
쉬움두 줄의 입력을 읽습니다:
- 쉼표로 구분된 정수 리스트
- 정수
min
다음 내용을 각각 별도의 줄에 출력합니다:
min보다 엄격히 큰 정수들을,로 연결하여 출력 (해당하는 정수가 없으면 빈 줄)- 해당하는 정수들의 제곱을
,로 연결하여 출력 - 해당하는 정수의 개수
filter + map을 체인으로 사용하세요. 입력을 두 번 반복해서 순회하지 마세요.
첫 번째 줄에 1,5,2,8,3,7, 두 번째 줄에 4가 입력으로 주어지면, 출력은 다음과 같습니다:
5,8,7
25,64,49
3치트 시트
filter를 사용하여 조건에 맞는 요소를 선택하세요:
let evens = [1,2,3,4].filter { $0 % 2 == 0 } // [2, 4]filter와 map을 파이프라인처럼 연결하여 사용하세요:
let result = nums
.filter { $0 > 2 }
.map { $0 * $0 } // [9, 16, 25, 36]각 단계는 새로운 배열을 반환하며, 원본은 변경되지 않습니다. 순서는 유지됩니다.
직접 해보기
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let min = Int(readLine()!)!
// TODO: min보다 큰 값을 한 번 필터링한 다음, 제곱으로 매핑합니다. 둘 다 출력한 다음 개수를 셉니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.