Menu
Coddy logo textTech

리스트 요소 제거: removeWhere

Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 5번째.

때때로 특정 조건에 따라 리스트에서 여러 요소를 제거해야 할 때가 있습니다. 요소를 하나씩 제거하는 대신, Dart는 단일 작업으로 테스트 조건을 충족하는 모든 요소를 제거할 수 있는 removeWhere() 메서드를 제공합니다.

removeWhere() 메서드는 테스트 함수를 매개변수로 받습니다. 이 함수는 리스트의 각 요소를 전달받아, 요소를 제거해야 하면 true를 반환하고, 유지해야 하면 false를 반환합니다. 그런 다음 이 메서드는 테스트 함수가 true를 반환하는 모든 요소를 제거합니다.

List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8];

// 모든 짝수 제거
numbers.removeWhere((number) => number % 2 == 0);

print(numbers);  // [1, 3, 5, 7]

이 접근 방식은 요소를 개별적으로 수동으로 검색하고 제거하는 것보다 훨씬 효율적입니다. removeWhere() 메서드는 원본 리스트를 직접 수정하므로, 불리언 테스트로 표현할 수 있는 모든 조건을 기반으로 리스트를 정리하는 데 강력한 도구가 됩니다.

challenge icon

챌린지

쉬움

학급 명단에서 낙제한 학생들을 제거하여 학생 성적 필터링 시스템을 관리하는 프로그램을 작성하세요. 프로그램의 요구 사항은 다음과 같습니다:

  1. 학급 이름을 나타내는 문자열 입력을 읽습니다.
  2. 학생들의 점수를 나타내는 여러 개의 정수 입력을 읽습니다 (입력은 -1을 받으면 종료됩니다).
  3. removeWhere() 메서드를 사용하여 60점 미만(낙제 점수)인 모든 점수를 제거합니다.
  4. 성적 필터링 결과를 아래에 표시된 정확한 형식으로 출력합니다.

예를 들어, 학급 이름이 "Mathematics 101"이고 점수가 85, 45, 92, 38, 76, 55, 88인 경우, 프로그램은 다음과 같이 출력해야 합니다:

Class: Mathematics 101
Original scores: [85, 45, 92, 38, 76, 55, 88]
Removed failing scores (below 60)
Passing scores: [85, 92, 76, 88]
Students passed: 4
Students failed: 3

학급 이름이 "History 201"이고 모든 점수가 합격인 경우(75, 82, 91), 프로그램은 다음과 같이 출력해야 합니다:

Class: History 201
Original scores: [75, 82, 91]
Removed failing scores (below 60)
Passing scores: [75, 82, 91]
Students passed: 3
Students failed: 0

학급 이름이 "Chemistry 301"이고 모든 점수가 낙제인 경우(45, 32, 58), 프로그램은 다음과 같이 출력해야 합니다:

Class: Chemistry 301
Original scores: [45, 32, 58]
Removed failing scores (below 60)
Passing scores: []
Students passed: 0
Students failed: 3

프로그램은 60점 미만의 점수에 대해 true를 반환하는 테스트 함수와 함께 removeWhere() 메서드를 사용해야 합니다. 이 메서드는 모든 낙제 점수를 제거하여 합격 점수만 남도록 원래 리스트를 수정해야 합니다.

치트 시트

removeWhere() 메서드는 특정 조건을 만족하는 리스트의 모든 요소를 제거합니다. 이 메서드는 제거할 요소에 대해 true를 반환하고 유지할 요소에 대해 false를 반환하는 테스트 함수를 인자로 받습니다.

List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8];

// 모든 짝수 제거
numbers.removeWhere((number) => number % 2 == 0);

print(numbers);  // [1, 3, 5, 7]

이 메서드는 원본 리스트를 직접 수정하며, 요소를 개별적으로 제거하는 것보다 더 효율적입니다.

직접 해보기

import 'dart:io';

void main() {
  // 클래스 이름 읽기
  String? className = stdin.readLineSync();
  
  // -1이 입력될 때까지 점수 읽기
  List<int> scores = [];
  while (true) {
    int score = int.parse(stdin.readLineSync()!);
    if (score == -1) {
      break;
    }
    scores.add(score);
  }
  
  // 표시를 위해 원본 점수 저장
  List<int> originalScores = List.from(scores);
  
  // TODO: 아래에 코드를 작성하세요
  // 60점 미만의 점수를 제거하기 위해 removeWhere() 메서드 사용
  
  // 결과 출력
  print('Class: $className');
  print('Original scores: $originalScores');
  print('Removed failing scores (below 60)');
  print('Passing scores: $scores');
  print('Students passed: ${scores.length}');
  print('Students failed: ${originalScores.length - scores.length}');
}
quiz icon실력 점검

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

로직 & 흐름의 모든 레슨