Rimozione dalla lista: removeWhere
Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 5 di 65.
A volte devi rimuovere più elementi da un elenco in base a una condizione specifica. Invece di rimuovere gli elementi uno alla volta, Dart mette a disposizione il metodo removeWhere(), che può rimuovere tutti gli elementi che soddisfano una condizione di test con una sola operazione.
Il metodo removeWhere() accetta una funzione di test come parametro. Questa funzione riceve ogni elemento della lista e restituisce true se l'elemento deve essere rimosso, oppure false se deve rimanere. Il metodo rimuove quindi tutti gli elementi per i quali la funzione di test restituisce true.
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8];
// Rimuovi tutti i numeri pari
numbers.removeWhere((number) => number % 2 == 0);
print(numbers); // [1, 3, 5, 7]Questo approccio è molto più efficiente che cercare e rimuovere manualmente gli elementi uno per uno. Il metodo removeWhere() modifica direttamente la lista originale, rendendolo uno strumento potente per ripulire le liste in base a qualsiasi condizione tu possa esprimere come test booleano.
Sfida
FacileCrea un programma che gestisca un sistema di filtraggio dei voti degli studenti rimuovendo dall'elenco della classe gli studenti non promossi. Il tuo programma deve:
- Leggere una stringa che rappresenta il nome della classe
- Leggere più valori interi che rappresentano i voti degli studenti (l'input terminerà quando ricevi
-1) - Usare il metodo
removeWhere()per rimuovere tutti i voti inferiori a 60 (voti insufficienti) - Stampare i risultati del filtraggio dei voti nel formato esatto mostrato qui sotto
Per esempio, se il nome della classe è "Mathematics 101" e i voti sono 85, 45, 92, 38, 76, 55, 88, il tuo programma dovrebbe produrre:
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: 3Se il nome della classe è "History 201" e tutti i voti sono sufficienti: 75, 82, 91, il tuo programma dovrebbe produrre:
Class: History 201
Original scores: [75, 82, 91]
Removed failing scores (below 60)
Passing scores: [75, 82, 91]
Students passed: 3
Students failed: 0Se il nome della classe è "Chemistry 301" e tutti i voti sono insufficienti: 45, 32, 58, il tuo programma dovrebbe produrre:
Class: Chemistry 301
Original scores: [45, 32, 58]
Removed failing scores (below 60)
Passing scores: []
Students passed: 0
Students failed: 3Il tuo programma deve usare il metodo removeWhere() con una funzione di test che restituisca true per i voti inferiori a 60. Il metodo dovrebbe modificare la lista originale rimuovendo tutti i voti insufficienti, lasciando solo quelli sufficienti.
Provalo tu
import 'dart:io';
void main() {
// Leggi il nome della classe
String? className = stdin.readLineSync();
// Leggi i punteggi finché non viene incontrato -1
List<int> scores = [];
while (true) {
int score = int.parse(stdin.readLineSync()!);
if (score == -1) {
break;
}
scores.add(score);
}
// Memorizza i punteggi originali per visualizzarli
List<int> originalScores = List.from(scores);
// TODO: Scrivi il tuo codice qui sotto
// Usa il metodo removeWhere() per rimuovere i punteggi inferiori a 60
// Stampa i risultati
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}');
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Manipolazione avanzata delle liste
Proprietà delle liste: primo e ultimoStato della lista: isEmpty e isNotEmpInvertire una listaAggiungere a una lista: insertRimozione dalla lista: removeWhereRicerca in una lista: indexOfOrdinare una listaMescolare una listaRiepilogo - Organizzatore di liste4Manipolazione avanzata delle mappe
Iterare su una mappaVerificare chiavi e valoriProprietà delle mappe: chiavi e valoriAggiunta condizionale: putIfAbsentRimuovere elementi da una mappaMappe annidateRiepilogo - Aggiornamento dell'inventario2Operazioni funzionali sulle liste
Trasformare con 'map'Filtrare con 'where'Usare '.toList()'Verificare condizioni con 'any'Condizioni con 'every'Trovare con 'firstWhere'Riepilogo - Filtraggio dei dati3Insiemi
Che cos'è un insieme?Creare un insiemeAggiungere e rimuovere elementi dagli insiemiVerificare la presenza di elementi in un insiemeConvertire una lista in un insiemeUnione di insiemiIntersezione di insiemiDifferenza tra insiemiRiepilogo - Lista degli ospiti uniciEsercitati da solo: Compilatore Dart online