리스트 요소 제거: 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() 메서드는 원본 리스트를 직접 수정하므로, 불리언 테스트로 표현할 수 있는 모든 조건을 기반으로 리스트를 정리하는 데 강력한 도구가 됩니다.
챌린지
쉬움학급 명단에서 낙제한 학생들을 제거하여 학생 성적 필터링 시스템을 관리하는 프로그램을 작성하세요. 프로그램의 요구 사항은 다음과 같습니다:
- 학급 이름을 나타내는 문자열 입력을 읽습니다.
- 학생들의 점수를 나타내는 여러 개의 정수 입력을 읽습니다 (입력은
-1을 받으면 종료됩니다). removeWhere()메서드를 사용하여 60점 미만(낙제 점수)인 모든 점수를 제거합니다.- 성적 필터링 결과를 아래에 표시된 정확한 형식으로 출력합니다.
예를 들어, 학급 이름이 "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}');
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 & 흐름의 모든 레슨
1고급 리스트 조작
리스트 속성: first 및 last리스트 상태: isEmpty 및 isNotEmpty리스트 뒤집기리스트에 추가: insert리스트 요소 제거: removeWhere리스트에서 찾기: indexOf리스트 정렬리스트 섞기요약 - 리스트 정리 도구