Menu
Coddy logo textTech

Wyszukiwanie za pomocą 'firstWhere'

Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 15 z 65.

Gdy musisz znaleźć na liście konkretny element spełniający określone kryteria, metoda firstWhere() zapewnia wydajne rozwiązanie. W przeciwieństwie do metod filtrowania, które zwracają wszystkie pasujące elementy, firstWhere() kończy wyszukiwanie, gdy tylko znajdzie pierwszy element spełniający warunek.

Metoda firstWhere() przyjmuje funkcję testującą, która zwraca true lub false dla każdego elementu. Sprawdza elementy po kolei, aż znajdzie pierwszy, który przejdzie test, a następnie natychmiast zwraca ten element.

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

// Znajdź pierwszą liczbę parzystą
int firstEven = numbers.firstWhere((number) => number % 2 == 0);
print(firstEven);  // 8

W sytuacjach, gdy żaden element nie spełnia Twojego warunku, firstWhere() udostępnia opcjonalny parametr orElse. Ten parametr przyjmuje funkcję, która zwraca wartość domyślną, gdy nie zostanie znalezione dopasowanie, dzięki czemu Twój program nie ulegnie awarii z powodu błędu.

challenge icon

Wyzwanie

Łatwy

Utwórz program, który zarządza systemem obsługi klienta, wyszukując pierwszą skargę klienta wymagającą natychmiastowej uwagi. Twój program powinien:

  1. Odczytać dane wejściowe w postaci ciągu znaków reprezentującego nazwę działu
  2. Odczytać wiele liczb całkowitych reprezentujących poziomy priorytetu skarg (wprowadzanie danych zakończy się po otrzymaniu -1)
  3. Odczytać liczbę całkowitą reprezentującą próg pilnego priorytetu
  4. Użyć metody firstWhere(), aby znaleźć pierwszą skargę o poziomie priorytetu większym lub równym progowi pilności
  5. Wypisać wyniki obsługi klienta w dokładnym formacie pokazanym poniżej

Na przykład, jeśli nazwa działu to "Technical Support", poziomy priorytetu to 3, 7, 2, 9, 4, a próg pilności wynosi 8, program powinien wypisać:

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

Jeśli nazwa działu to "Billing Department", poziomy priorytetu to 4, 6, 3, 5, a próg pilności wynosi 7, program powinien wypisać:

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

Jeśli nazwa działu to "Sales Support", poziomy priorytetu to 10, 2, 8, a próg pilności wynosi 9, program powinien wypisać:

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

Twój program musi użyć metody firstWhere(), aby znaleźć pierwszą skargę o priorytecie większym lub równym progowi pilności. Jeśli nie zostanie znaleziona pilna skarga, wyświetl "Not found" jako pierwszą pilną skargę i pokaż "No urgent complaints - continue normal processing" jako status. Jeśli zostanie znaleziona pilna skarga, wyświetl jej poziom priorytetu i pokaż "Urgent complaint found - immediate action required" jako status.

Spróbuj swoich sił

import 'dart:io';

void main() {
  // Odczytaj nazwę działu
  String? department = stdin.readLineSync();
  
  // Odczytuj poziomy priorytetu zgłoszeń aż do -1
  List<int> complaints = [];
  while (true) {
    int priority = int.parse(stdin.readLineSync()!);
    if (priority == -1) break;
    complaints.add(priority);
  }
  
  // Odczytaj próg pilności
  int urgentThreshold = int.parse(stdin.readLineSync()!);
  
  // TODO: Napisz swój kod poniżej
  // Użyj metody firstWhere(), aby znaleźć pierwsze zgłoszenie >= urgentThreshold
  
  // Wyświetl wyniki
  print('Department: $department');
  print('All complaints: $complaints');
  print('Urgent threshold: $urgentThreshold');
  print('Searching for first complaint >= $urgentThreshold');
  // Wyświetl wynik dla pierwszego pilnego zgłoszenia
  // Wyświetl komunikat o stanie
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Dart online