Trovare con 'firstWhere'
Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 15 di 65.
Quando devi trovare un elemento specifico in un elenco che soddisfa determinati criteri, il metodo firstWhere() offre una soluzione efficiente. A differenza dei metodi di filtraggio, che restituiscono tutti gli elementi corrispondenti, firstWhere() interrompe la ricerca non appena trova il primo elemento che soddisfa la tua condizione.
Il metodo firstWhere() accetta una funzione di test che restituisce true o false per ogni elemento. Esamina gli elementi uno alla volta finché non trova il primo che supera il test, quindi restituisce immediatamente quell'elemento.
List<int> numbers = [1, 3, 8, 15, 22, 7];
// Trova il primo numero pari
int firstEven = numbers.firstWhere((number) => number % 2 == 0);
print(firstEven); // 8Per i casi in cui nessun elemento corrisponde alla tua condizione, firstWhere() fornisce un parametro facoltativo orElse. Questo parametro accetta una funzione che restituisce un valore predefinito quando non viene trovata alcuna corrispondenza, impedendo al tuo programma di andare in crash con un errore.
Sfida
FacileCrea un programma che gestisca un sistema di assistenza clienti individuando il primo reclamo di un cliente che richiede attenzione immediata. Il tuo programma deve:
- Leggere una stringa in input che rappresenta il nome del reparto
- Leggere più valori interi in input che rappresentano i livelli di priorità dei reclami (l'input terminerà quando riceverai
-1) - Leggere un valore intero in input che rappresenta la soglia di priorità urgente
- Usare il metodo
firstWhere()per trovare il primo reclamo con un livello di priorità maggiore o uguale alla soglia di priorità urgente - Stampare i risultati dell'assistenza clienti nel formato esatto mostrato qui sotto
Ad esempio, se il nome del reparto è "Technical Support", i livelli di priorità sono 3, 7, 2, 9, 4 e la soglia di priorità urgente è 8, il tuo programma dovrebbe produrre:
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 requiredSe il nome del reparto è "Billing Department", i livelli di priorità sono 4, 6, 3, 5 e la soglia di priorità urgente è 7, il tuo programma dovrebbe produrre:
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 processingSe il nome del reparto è "Sales Support", i livelli di priorità sono 10, 2, 8 e la soglia di priorità urgente è 9, il tuo programma dovrebbe produrre:
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 requiredIl tuo programma deve usare il metodo firstWhere() per trovare la prima priorità di reclamo maggiore o uguale alla soglia di priorità urgente. Se non viene trovato alcun reclamo urgente, visualizza "Not found" per il primo reclamo urgente e mostra "No urgent complaints - continue normal processing" come stato. Se viene trovato un reclamo urgente, visualizza il livello di priorità e mostra "Urgent complaint found - immediate action required" come stato.
Provalo tu
import 'dart:io';
void main() {
// Leggi il nome del dipartimento
String? department = stdin.readLineSync();
// Leggi i livelli di priorità dei reclami fino a -1
List<int> complaints = [];
while (true) {
int priority = int.parse(stdin.readLineSync()!);
if (priority == -1) break;
complaints.add(priority);
}
// Leggi la soglia di urgenza
int urgentThreshold = int.parse(stdin.readLineSync()!);
// TODO: Scrivi il tuo codice qui sotto
// Usa il metodo firstWhere() per trovare il primo reclamo con priorità >= urgentThreshold
// Mostra i risultati
print('Department: $department');
print('All complaints: $complaints');
print('Urgent threshold: $urgentThreshold');
print('Searching for first complaint >= $urgentThreshold');
// Mostra il risultato del primo reclamo urgente
// Mostra il messaggio di stato
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Manipolazione avanzata delle liste
Proprietà delle liste: primo e ultimoStato della lista: isEmpty e isNotEmpInvertire una listaAggiungere a una lista: insertRimozione dalla lista: removeWhereRicerca in una lista: indexOfOrdinare una listaMescolare una listaRiepilogo - Organizzatore di liste4Manipolazione avanzata delle mappe
Iterare su una mappaVerificare chiavi e valoriProprietà delle mappe: chiavi e valoriAggiunta condizionale: putIfAbsentRimuovere elementi da una mappaMappe annidateRiepilogo - Aggiornamento dell'inventario2Operazioni funzionali sulle liste
Trasformare con 'map'Filtrare con 'where'Usare '.toList()'Verificare condizioni con 'any'Condizioni con 'every'Trovare con 'firstWhere'Riepilogo - Filtraggio dei dati3Insiemi
Che cos'è un insieme?Creare un insiemeAggiungere e rimuovere elementi dagli insiemiVerificare la presenza di elementi in un insiemeConvertire una lista in un insiemeUnione di insiemiIntersezione di insiemiDifferenza tra insiemiRiepilogo - Lista degli ospiti uniciEsercitati da solo: Compilatore Dart online