Menu
Coddy logo textTech

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]

결과는 원래의 순서를 유지합니다. 결과 타입은 입력 타입과 일치하며, 변환은 일어나지 않고 선택만 수행됩니다.

filtermap과 자연스럽게 연결됩니다:

let big = nums
    .filter { $0 > 2 }
    .map { $0 * $0 }
print(big)                   // [9, 16, 25, 36]

각 체인을 파이프라인처럼 위에서 아래로 읽으세요. 각 단계는 새로운 배열을 생성하며, 원본은 아무것도 수정하지 않습니다.

challenge icon

챌린지

쉬움

두 줄의 입력을 읽습니다:

  1. 쉼표로 구분된 정수 리스트
  2. 정수 min

다음 내용을 각각 별도의 줄에 출력합니다:

  1. min보다 엄격히 큰 정수들을 ,로 연결하여 출력 (해당하는 정수가 없으면 빈 줄)
  2. 해당하는 정수들의 제곱,로 연결하여 출력
  3. 해당하는 정수의 개수

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]

filtermap을 파이프라인처럼 연결하여 사용하세요:

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보다 큰 값을 한 번 필터링한 다음, 제곱으로 매핑합니다. 둘 다 출력한 다음 개수를 셉니다.
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 및 흐름의 모든 레슨