Menu
Coddy logo textTech

Suchen mit 'firstWhere'

Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 15 von 65.

Wenn Sie ein bestimmtes Element in einer Liste finden müssen, das bestimmte Kriterien erfüllt, bietet die Methode firstWhere() eine effiziente Lösung. Im Gegensatz zu Filter-Methoden, die alle übereinstimmenden Elemente zurückgeben, stoppt firstWhere() die Suche, sobald das erste Element gefunden wird, das Ihre Bedingung erfüllt.

Die Methode firstWhere() nimmt eine Testfunktion entgegen, die für jedes Element true oder false zurückgibt. Sie prüft die Elemente nacheinander, bis sie das erste findet, das den Test besteht, und gibt dieses Element dann sofort zurück.

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

// Finde die erste gerade Zahl
int firstEven = numbers.firstWhere((number) => number % 2 == 0);
print(firstEven);  // 8

Für Situationen, in denen kein Element Ihrer Bedingung entspricht, bietet firstWhere() einen optionalen orElse-Parameter. Dieser Parameter akzeptiert eine Funktion, die einen Standardwert zurückgibt, wenn keine Übereinstimmung gefunden wird, wodurch verhindert wird, dass Ihr Programm mit einem Fehler abstürzt.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Programm, das ein Kundenservice-System verwaltet, indem es die erste Kundenbeschwerde findet, die sofortige Aufmerksamkeit erfordert. Ihr Programm sollte:

  1. Einen String-Input einlesen, der den Abteilungsnamen darstellt
  2. Mehrere Integer-Inputs einlesen, die die Prioritätsstufen der Beschwerden darstellen (die Eingabe endet, wenn Sie -1 erhalten)
  3. Einen Integer-Input einlesen, der den Schwellenwert für dringende Priorität darstellt
  4. Die Methode firstWhere() verwenden, um die erste Beschwerde mit einer Prioritätsstufe größer oder gleich dem dringenden Schwellenwert zu finden
  5. Die Kundenservice-Ergebnisse im exakt unten gezeigten Format ausgeben

Wenn zum Beispiel der Abteilungsname "Technical Support" ist, die Prioritätsstufen 3, 7, 2, 9, 4 sind und der dringende Schwellenwert 8 ist, sollte Ihr Programm Folgendes ausgeben:

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

Wenn der Abteilungsname "Billing Department" ist, die Prioritätsstufen 4, 6, 3, 5 sind und der dringende Schwellenwert 7 ist, sollte Ihr Programm Folgendes ausgeben:

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

Wenn der Abteilungsname "Sales Support" ist, die Prioritätsstufen 10, 2, 8 sind und der dringende Schwellenwert 9 ist, sollte Ihr Programm Folgendes ausgeben:

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

Ihr Programm muss die Methode firstWhere() verwenden, um die erste Beschwerdepriorität zu finden, die größer oder gleich dem dringenden Schwellenwert ist. Wenn keine dringende Beschwerde gefunden wird, zeigen Sie "Not found" für die erste dringende Beschwerde an und geben Sie "No urgent complaints - continue normal processing" als Status aus. Wenn eine dringende Beschwerde gefunden wird, zeigen Sie die Prioritätsstufe an und geben Sie "Urgent complaint found - immediate action required" als Status aus.

Spickzettel

Die Methode firstWhere() findet das erste Element in einer Liste, das eine bestimmte Bedingung erfüllt. Sie bricht die Suche ab, sobald eine Übereinstimmung gefunden wird, und gibt dieses Element zurück.

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

// Finde die erste gerade Zahl
int firstEven = numbers.firstWhere((number) => number % 2 == 0);
print(firstEven);  // 8

Verwenden Sie den Parameter orElse, um einen Standardwert bereitzustellen, wenn kein Element die Bedingung erfüllt:

// Gibt einen Standardwert zurück, wenn keine Übereinstimmung gefunden wird
int result = numbers.firstWhere(
  (number) => number > 100,
  orElse: () => -1
);

Probier es selbst

import 'dart:io';

void main() {
  // Abteilungsnamen lesen
  String? department = stdin.readLineSync();
  
  // Beschwerde-Prioritätsstufen lesen bis -1
  List<int> complaints = [];
  while (true) {
    int priority = int.parse(stdin.readLineSync()!);
    if (priority == -1) break;
    complaints.add(priority);
  }
  
  // Dringlichkeitsschwellenwert lesen
  int urgentThreshold = int.parse(stdin.readLineSync()!);
  
  // TODO: Schreiben Sie Ihren Code unten
  // Verwenden Sie die Methode firstWhere(), um die erste Beschwerde >= urgentThreshold zu finden
  
  // Ergebnisse ausgeben
  print('Department: $department');
  print('All complaints: $complaints');
  print('Urgent threshold: $urgentThreshold');
  print('Searching for first complaint >= $urgentThreshold');
  // Ergebnis der ersten dringenden Beschwerde drucken
  // Statusmeldung drucken
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf