Menu
Coddy logo textTech

Elemente aus Liste entfernen: removeWhere

Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 5 von 65.

Manchmal müssen Sie mehrere Elemente aus einer Liste basierend auf einer bestimmten Bedingung entfernen. Anstatt Elemente einzeln zu entfernen, bietet Dart die Methode removeWhere() an, die alle Elemente, die eine Testbedingung erfüllen, in einem einzigen Vorgang entfernen kann.

Die Methode removeWhere() nimmt eine Testfunktion als Parameter entgegen. Diese Funktion erhält jedes Element in der Liste und gibt true zurück, wenn das Element entfernt werden soll, oder false, wenn es erhalten bleiben soll. Die Methode entfernt anschließend alle Elemente, für die die Testfunktion true zurückgibt.

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

// Alle geraden Zahlen entfernen
numbers.removeWhere((number) => number % 2 == 0);

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

Dieser Ansatz ist viel effizienter als das manuelle Suchen und Entfernen einzelner Elemente. Die Methode removeWhere() modifiziert die ursprüngliche Liste direkt und ist damit ein leistungsstarkes Werkzeug zum Bereinigen von Listen basierend auf jeder Bedingung, die Sie als booleschen Test ausdrücken können.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Programm, das ein System zur Filterung von Schülernoten verwaltet, indem es Schüler, die nicht bestanden haben, aus einer Klassenliste entfernt. Ihr Programm sollte:

  1. Einen String-Input einlesen, der den Klassennamen darstellt
  2. Mehrere Integer-Inputs einlesen, die die Punktzahlen der Schüler darstellen (die Eingabe endet, wenn Sie -1 erhalten)
  3. Die Methode removeWhere() verwenden, um alle Punktzahlen zu entfernen, die unter 60 liegen (nicht bestandene Noten)
  4. Die Ergebnisse der Notenfilterung im exakt unten gezeigten Format ausgeben

Wenn zum Beispiel der Klassenname "Mathematics 101" ist und die Punktzahlen 85, 45, 92, 38, 76, 55, 88 sind, sollte Ihr Programm Folgendes ausgeben:

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

Wenn der Klassenname "History 201" ist und alle Punktzahlen bestanden sind: 75, 82, 91, sollte Ihr Programm Folgendes ausgeben:

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

Wenn der Klassenname "Chemistry 301" ist und alle Punktzahlen nicht bestanden sind: 45, 32, 58, sollte Ihr Programm Folgendes ausgeben:

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

Ihr Programm muss die Methode removeWhere() mit einer Testfunktion verwenden, die true für Punktzahlen unter 60 zurückgibt. Die Methode sollte die ursprüngliche Liste ändern, indem sie alle nicht bestandenen Noten entfernt, sodass nur die bestandenen Punktzahlen übrig bleiben.

Spickzettel

Die Methode removeWhere() entfernt alle Elemente aus einer Liste, die eine bestimmte Bedingung erfüllen. Sie erwartet eine Testfunktion, die true für zu entfernende Elemente und false für beizubehaltende Elemente zurückgibt.

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

// Alle geraden Zahlen entfernen
numbers.removeWhere((number) => number % 2 == 0);

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

Die Methode modifiziert die ursprüngliche Liste direkt und ist effizienter als das einzelne Entfernen von Elementen.

Probier es selbst

import 'dart:io';

void main() {
  // Klassennamen lesen
  String? className = stdin.readLineSync();
  
  // Punktzahlen lesen, bis -1 eingegeben wird
  List<int> scores = [];
  while (true) {
    int score = int.parse(stdin.readLineSync()!);
    if (score == -1) {
      break;
    }
    scores.add(score);
  }
  
  // Ursprüngliche Punktzahlen für die Anzeige speichern
  List<int> originalScores = List.from(scores);
  
  // TODO: Schreiben Sie Ihren Code unten
  // Verwenden Sie die Methode removeWhere(), um Punktzahlen unter 60 zu entfernen
  
  // Ergebnisse ausgeben
  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 iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf