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); // 8W 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.
Wyzwanie
ŁatwyUtwórz program, który zarządza systemem obsługi klienta, wyszukując pierwszą skargę klienta wymagającą natychmiastowej uwagi. Twój program powinien:
- Odczytać dane wejściowe w postaci ciągu znaków reprezentującego nazwę działu
- Odczytać wiele liczb całkowitych reprezentujących poziomy priorytetu skarg (wprowadzanie danych zakończy się po otrzymaniu
-1) - Odczytać liczbę całkowitą reprezentującą próg pilnego priorytetu
- Użyć metody
firstWhere(), aby znaleźć pierwszą skargę o poziomie priorytetu większym lub równym progowi pilności - 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 requiredJeś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 processingJeś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 requiredTwó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
}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
1Zaawansowana manipulacja listami
Właściwości listy: first i lastStan listy: isEmpty i isNotEmpOdwracanie listyDodawanie do listy: insertUsuwanie z listy: removeWhereWyszukiwanie na liście: indexOfSortowanie listyMieszanie elementów listyPodsumowanie – Organizator listy4Zaawansowane operacje na mapach
Iterowanie po mapieSprawdzanie kluczy i wartościWłaściwości mapy: klucze i wartościDodawanie warunkowe: putIfAbsentUsuwanie wpisów z mapyZagnieżdżone mapyPodsumowanie – aktualizacja stanu magazynowego2Operacje funkcyjne na listach
Przekształcanie za pomocą 'map'Filtrowanie za pomocą 'where'Używanie '.toList()'Sprawdzanie warunków za pomocą 'any'Warunki z użyciem 'every'Wyszukiwanie za pomocą 'firstWhere'Podsumowanie — filtrowanie danych5Projekt: Kalkulator koszyka zakupowego
Konfiguracja projektuDodawanie produktów do koszyka3Zbiory
Czym jest zbiór?Tworzenie zbioruDodawanie i usuwanie elementów ze zbiorówSprawdzanie, czy element znajduje się w zbiorzeKonwersja listy na zbiórSuma zbiorówCzęść wspólna zbiorówRóżnica zbiorówPodsumowanie — unikalna lista gościPoćwicz samodzielnie: Kompilator Dart online