Suppression dans une liste : removeWhere
Fait partie de la section Logique & Flux du Journey Dart de Coddy — leçon 5 sur 65.
Parfois, vous devez supprimer plusieurs éléments d'une liste en fonction d'une condition spécifique. Au lieu de supprimer les éléments un par un, Dart propose la méthode removeWhere() qui peut supprimer tous les éléments correspondant à une condition de test en une seule opération.
La méthode removeWhere() prend une fonction de test comme paramètre. Cette fonction reçoit chaque élément de la liste et renvoie true si l'élément doit être supprimé, ou false s'il doit rester. La méthode supprime ensuite tous les éléments pour lesquels la fonction de test renvoie true.
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8];
// Supprimer tous les nombres pairs
numbers.removeWhere((number) => number % 2 == 0);
print(numbers); // [1, 3, 5, 7]Cette approche est bien plus efficace que de rechercher et de supprimer manuellement les éléments individuellement. La méthode removeWhere() modifie directement la liste d'origine, ce qui en fait un outil puissant pour nettoyer des listes en fonction de n'importe quelle condition que vous pouvez exprimer sous forme de test booléen.
Défi
FacileCréez un programme qui gère un système de filtrage des notes des étudiants en supprimant les étudiants ayant échoué d'une liste de classe. Votre programme doit :
- Lire une chaîne de caractères en entrée représentant le nom de la classe
- Lire plusieurs entiers en entrée représentant les scores des étudiants (la saisie se terminera lorsque vous recevrez
-1) - Utiliser la méthode
removeWhere()pour supprimer tous les scores inférieurs à 60 (notes d'échec) - Afficher les résultats du filtrage des notes exactement selon le format indiqué ci-dessous
Par exemple, si le nom de la classe est "Mathematics 101" et que les scores sont 85, 45, 92, 38, 76, 55, 88, votre programme doit afficher :
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: 3Si le nom de la classe est "History 201" et que tous les scores sont réussis : 75, 82, 91, votre programme doit afficher :
Class: History 201
Original scores: [75, 82, 91]
Removed failing scores (below 60)
Passing scores: [75, 82, 91]
Students passed: 3
Students failed: 0Si le nom de la classe est "Chemistry 301" et que tous les scores sont en échec : 45, 32, 58, votre programme doit afficher :
Class: Chemistry 301
Original scores: [45, 32, 58]
Removed failing scores (below 60)
Passing scores: []
Students passed: 0
Students failed: 3Votre programme doit utiliser la méthode removeWhere() avec une fonction de test qui renvoie true pour les scores inférieurs à 60. La méthode doit modifier la liste originale en supprimant toutes les notes d'échec, ne laissant que les scores de passage.
Aide-mémoire
La méthode removeWhere() supprime tous les éléments d'une liste qui correspondent à une condition spécifique. Elle prend une fonction de test qui renvoie true pour les éléments à supprimer et false pour les éléments à conserver.
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8];
// Supprimer tous les nombres pairs
numbers.removeWhere((number) => number % 2 == 0);
print(numbers); // [1, 3, 5, 7]La méthode modifie directement la liste d'origine et est plus efficace que la suppression individuelle des éléments.
Essayez vous-même
import 'dart:io';
void main() {
// Lire le nom de la classe
String? className = stdin.readLineSync();
// Lire les scores jusqu'à ce que -1 soit rencontré
List<int> scores = [];
while (true) {
int score = int.parse(stdin.readLineSync()!);
if (score == -1) {
break;
}
scores.add(score);
}
// Stocker les scores originaux pour l'affichage
List<int> originalScores = List.from(scores);
// TODO: Écrivez votre code ci-dessous
// Utilisez la méthode removeWhere() pour supprimer les scores inférieurs à 60
// Afficher les résultats
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}');
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique & Flux
1Manipulation avancée des listes
Propriétés de liste : first & lastÉtat de la liste : isEmpty & isNotEmptyInverser une listeAjouter à une liste : insertSuppression dans une liste : removeWhereRechercher dans une liste : indexOfTrier une listeMélanger une listeRécapitulatif - Organisateur de liste4Manipulation avancée des Maps
Itérer sur une MapVérifier les clés et les valeursPropriétés de Map : keys & valuesAjout conditionnel : putIfAbsentSupprimer des entrées d'une MapMaps imbriquéesRécapitulatif - Mise à jour de l'inventaire2Opérations fonctionnelles sur les listes
Transformer avec 'map'Filtrer avec 'where'Utiliser '.toList()'Vérifier des conditions avec 'any'Conditions avec 'every'Trouver avec 'firstWhere'Récapitulatif - Filtrage de données3Les Ensembles
Qu'est-ce qu'un ensemble ?Créer un ensembleAjouter et supprimer des éléments d'un ensembleVérifier la présence d'éléments dans un ensembleConvertir une liste en ensembleUnion d'ensemblesIntersection d'ensemblesDifférence d'ensemblesRécapitulatif - Liste d'invités uniques