Filtrer avec 'where'
Fait partie de la section Logique & Flux du Journey Dart de Coddy. Leçon 11 sur 65.
Alors que map() transforme chaque élément d'une liste, vous ne voulez parfois garder que les éléments qui répondent à des critères spécifiques. La méthode where() vous permet de filtrer une liste en testant chaque élément par rapport à une condition et en ne gardant que ceux qui réussissent le test.
La méthode where() prend une fonction de test qui renvoie true ou false pour chaque élément. Les éléments qui renvoient true sont inclus dans le résultat, tandis que ceux qui renvoient false sont filtrés.
List<int> scores = [45, 78, 92, 33, 67, 88];
// Filtrer pour ne garder que les scores supérieurs à 50
var passingScores = scores.where((score) => score > 50);
print(passingScores); // (78, 92, 67, 88)Cette approche de filtrage est bien plus propre que de parcourir manuellement une liste et de construire une nouvelle collection. La méthode where() représente un modèle fondamental dans le traitement des données, vous permettant de spécifier de manière déclarative ce que vous voulez conserver plutôt que la manière de l'extraire.
Défi
FacileCréez un programme qui gère un système de suivi des performances des étudiants en filtrant les étudiants en fonction de leurs résultats aux tests. Votre programme doit :
- Lire une chaîne de caractères représentant le nom de la classe
- Lire plusieurs entiers représentant les résultats des étudiants aux tests (la saisie se terminera lorsque vous recevrez
-1) - Lire un entier représentant le seuil minimal de réussite
- Utiliser la méthode
where()pour filtrer et conserver uniquement les résultats supérieurs ou égaux au seuil - Afficher les résultats du filtrage dans le format exact indiqué ci-dessous
Par exemple, si le nom de la classe est "Mathematics 101", que les résultats sont 85, 42, 78, 91, 55, 88, et que le seuil est 70, votre programme doit afficher :
Class: Mathematics 101
Original scores: [85, 42, 78, 91, 55, 88]
Minimum passing score: 70
Filtering scores >= 70
Passing scores: (85, 78, 91, 88)
Students passed: 4 out of 6
Pass rate: 66.67%Si le nom de la classe est "Science Lab", que les résultats sont 45, 38, 52, et que le seuil est 60, votre programme doit afficher :
Class: Science Lab
Original scores: [45, 38, 52]
Minimum passing score: 60
Filtering scores >= 60
Passing scores: ()
Students passed: 0 out of 3
Pass rate: 0.00%Si le nom de la classe est "History", que les résultats sont 95, 88, 92, et que le seuil est 80, votre programme doit afficher :
Class: History
Original scores: [95, 88, 92]
Minimum passing score: 80
Filtering scores >= 80
Passing scores: (95, 88, 92)
Students passed: 3 out of 3
Pass rate: 100.00%Votre programme doit utiliser la méthode where() pour filtrer les résultats supérieurs ou égaux au seuil. Le résultat filtré sera affiché entre parenthèses, sous forme d'itérable. Calculez le taux de réussite sous forme de pourcentage avec exactement 2 décimales en utilisant la formule : (passing students / total students) * 100.
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);
}
// Lire le seuil de score minimum de passage
int threshold = int.parse(stdin.readLineSync()!);
// TODO: Écrivez votre code ci-dessous
// Utilisez la méthode where() pour filtrer les scores >= threshold
// Afficher les résultats au format requis
print('Class: $className');
print('Original scores: $scores');
print('Minimum passing score: $threshold');
print('Filtering scores >= $threshold');
// Afficher les scores de passage, le nombre d'étudiants ayant réussi et le taux de réussite
}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 uniquesEntraînez-vous par vous-même : Compilateur Dart en ligne