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.
Aufgabe
EinfachErstellen 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:
- Einen String-Input einlesen, der den Klassennamen darstellt
- Mehrere Integer-Inputs einlesen, die die Punktzahlen der Schüler darstellen (die Eingabe endet, wenn Sie
-1erhalten) - Die Methode
removeWhere()verwenden, um alle Punktzahlen zu entfernen, die unter 60 liegen (nicht bestandene Noten) - 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: 3Wenn 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: 0Wenn 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: 3Ihr 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}');
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittene Listenmanipulation
Listen-Eigenschaften: first & lastListen-Status: isEmpty & isNotEmptyEine Liste umkehrenHinzufügen zu einer Liste: insertElemente aus Liste entfernen: removeWhereSuchen in einer Liste: indexOfEine Liste sortierenEine Liste mischenZusammenfassung – Listen-Organizer4Fortgeschrittene Map-Manipulation
Über eine Map iterierenPrüfen auf Schlüssel und WerteMap-Eigenschaften: keys & valuesBedingtes Hinzufügen: putIfAbsentEinträge aus einer Map entfernenVerschachtelte MapsRückblick – Inventar-Update7Fortgeschrittene Funktionen
Anonyme FunktionenFunktionen als Argumente übergebenClosures verstehenEinführung in die RekursionRekursive Funktion: CountdownRekursive Funktion: FakultätZusammenfassung – List Processor10Abschluss-Herausforderungen
Herausforderung: NotensortiererHerausforderung: VokalzählerHerausforderung: FizzBuzz2Funktionale Listenoperationen
Transformieren mit 'map'Filtern mit 'where''.toList()' verwendenBedingungen prüfen mit 'any'Bedingungen mit 'every'Suchen mit 'firstWhere'Zusammenfassung – Datenfilterung3Sets
Was ist ein Set?Ein Set erstellenHinzufügen und Entfernen in SetsPrüfen auf Elemente in einem SetEine Liste in ein Set umwandelnSet-VereinigungSet-SchnittmengeSet-DifferenzRückblick – Einzigartige Gästeliste