Menu
Coddy logo textTech

Trouver avec 'firstWhere'

Fait partie de la section Logique & Flux du Journey Dart de Coddy. Leçon 15 sur 65.

Lorsque vous avez besoin de trouver un élément spécifique dans une liste qui répond à certains critères, la méthode firstWhere() offre une solution efficace. Contrairement aux méthodes de filtrage qui retournent tous les éléments correspondants, firstWhere() arrête la recherche dès qu'elle trouve le premier élément qui satisfait votre condition.

La méthode firstWhere() prend une fonction de test qui renvoie true ou false pour chaque élément. Elle examine les éléments un par un jusqu'à ce qu'elle trouve le premier qui réussit le test, puis renvoie immédiatement cet élément.

List<int> numbers = [1, 3, 8, 15, 22, 7];

// Trouver le premier nombre pair
int firstEven = numbers.firstWhere((number) => number % 2 == 0);
print(firstEven);  // 8

Pour les situations où aucun élément ne correspond à votre condition, firstWhere() fournit un paramètre optionnel orElse. Ce paramètre accepte une fonction qui renvoie une valeur par défaut lorsqu'aucune correspondance n'est trouvée, empêchant votre programme de planter avec une erreur.

challenge icon

Défi

Facile

Créez un programme qui gère un système de service client en recherchant la première réclamation client nécessitant une attention immédiate. Votre programme doit :

  1. Lire une entrée de type chaîne représentant le nom du service
  2. Lire plusieurs entrées entières représentant les niveaux de priorité des réclamations (la saisie se termine lorsque vous recevez -1)
  3. Lire une entrée entière représentant le seuil de priorité urgente
  4. Utiliser la méthode firstWhere() pour trouver la première réclamation dont le niveau de priorité est supérieur ou égal au seuil d'urgence
  5. Afficher les résultats du service client dans le format exact indiqué ci-dessous

Par exemple, si le nom du service est "Technical Support", que les niveaux de priorité sont 3, 7, 2, 9, 4, et que le seuil d'urgence est 8, votre programme doit afficher :

Department: Technical Support
All complaints: [3, 7, 2, 9, 4]
Urgent threshold: 8
Searching for first complaint >= 8
First urgent complaint: 9
Status: Urgent complaint found - immediate action required

Si le nom du service est "Billing Department", que les niveaux de priorité sont 4, 6, 3, 5, et que le seuil d'urgence est 7, votre programme doit afficher :

Department: Billing Department
All complaints: [4, 6, 3, 5]
Urgent threshold: 7
Searching for first complaint >= 7
First urgent complaint: Not found
Status: No urgent complaints - continue normal processing

Si le nom du service est "Sales Support", que les niveaux de priorité sont 10, 2, 8, et que le seuil d'urgence est 9, votre programme doit afficher :

Department: Sales Support
All complaints: [10, 2, 8]
Urgent threshold: 9
Searching for first complaint >= 9
First urgent complaint: 10
Status: Urgent complaint found - immediate action required

Votre programme doit utiliser la méthode firstWhere() pour trouver la première priorité de réclamation supérieure ou égale au seuil d'urgence. Si aucune réclamation urgente n'est trouvée, affichez « Introuvable » pour la première réclamation urgente et indiquez « Aucune réclamation urgente - poursuivre le traitement normal » comme statut. Si une réclamation urgente est trouvée, affichez son niveau de priorité et indiquez « Réclamation urgente trouvée - action immédiate requise » comme statut.

Essayez vous-même

import 'dart:io';

void main() {
  // Lire le nom du département
  String? department = stdin.readLineSync();
  
  // Lire les niveaux de priorité des plaintes jusqu'à -1
  List<int> complaints = [];
  while (true) {
    int priority = int.parse(stdin.readLineSync()!);
    if (priority == -1) break;
    complaints.add(priority);
  }
  
  // Lire le seuil d'urgence
  int urgentThreshold = int.parse(stdin.readLineSync()!);
  
  // TODO: Écrivez votre code ci-dessous
  // Utiliser la méthode firstWhere() pour trouver la première plainte >= urgentThreshold
  
  // Afficher les résultats
  print('Department: $department');
  print('All complaints: $complaints');
  print('Urgent threshold: $urgentThreshold');
  print('Searching for first complaint >= $urgentThreshold');
  // Afficher le résultat de la première plainte urgente
  // Afficher le message de statut
}
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Compilateur Dart en ligne