Verificare condizioni con 'any'
Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 13 di 65.
A volte devi verificare se almeno un elemento di un elenco soddisfa una condizione specifica, senza dover esaminare ogni singolo elemento. Il metodo any() offre un modo efficiente per farlo, restituendo true non appena trova il primo elemento che soddisfa la condizione di test.
Il metodo any() accetta una funzione di test che restituisce true o false per ogni elemento. Se un elemento qualsiasi supera il test, any() restituisce immediatamente true. Se nessun elemento supera il test dopo aver controllato l'intero elenco, restituisce false.
List<double> prices = [15.99, 45.50, 120.00, 8.75];
// Controlla se un articolo costa più di $100
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem); // trueQuesto metodo è particolarmente utile negli scenari di convalida in cui devi sapere se almeno un elemento soddisfa determinati criteri. Il metodo any() interrompe i controlli non appena trova una corrispondenza, risultando più efficiente che scorrere manualmente l’intero elenco quando devi solo sapere se qualcosa esiste.
Sfida
FacileCrea un programma che gestisca un sistema di sicurezza controllando se un sensore in un edificio ha rilevato attività sospette. Il programma deve:
- Leggere una stringa di input che rappresenta il nome dell'edificio
- Leggere più input interi che rappresentano le letture dei sensori dei diversi piani (l'input terminerà quando riceverai
-1) - Leggere un input intero che rappresenta il valore della soglia di allarme
- Usare il metodo
any()per verificare se una lettura di un sensore è maggiore o uguale alla soglia di allarme - Stampare i risultati del monitoraggio di sicurezza nel formato esatto mostrato qui sotto
Ad esempio, se il nome dell'edificio è "Office Tower", le letture dei sensori sono 15, 23, 8, 45, 12 e la soglia di allarme è 40, il programma dovrebbe stampare:
Building: Office Tower
Sensor readings: [15, 23, 8, 45, 12]
Alert threshold: 40
Checking for readings >= 40
Alert triggered: true
Status: Security breach detected - immediate response requiredSe il nome dell'edificio è "Shopping Mall", le letture dei sensori sono 18, 25, 12, 30 e la soglia di allarme è 50, il programma dovrebbe stampare:
Building: Shopping Mall
Sensor readings: [18, 25, 12, 30]
Alert threshold: 50
Checking for readings >= 50
Alert triggered: false
Status: All systems normal - no threats detectedSe il nome dell'edificio è "Warehouse", le letture dei sensori sono 75, 82 e la soglia di allarme è 70, il programma dovrebbe stampare:
Building: Warehouse
Sensor readings: [75, 82]
Alert threshold: 70
Checking for readings >= 70
Alert triggered: true
Status: Security breach detected - immediate response requiredIl programma deve usare il metodo any() per verificare se una lettura di un sensore è maggiore o uguale alla soglia di allarme. Visualizza "Security breach detected - immediate response required" se un sensore attiva l'allarme, oppure "All systems normal - no threats detected" se nessun sensore supera la soglia.
Provalo tu
import 'dart:io';
void main() {
// Leggi il nome dell'edificio
String? buildingName = stdin.readLineSync();
// Leggi le letture dei sensori finché non viene incontrato -1
List<int> sensorReadings = [];
while (true) {
int reading = int.parse(stdin.readLineSync()!);
if (reading == -1) {
break;
}
sensorReadings.add(reading);
}
// Leggi la soglia di allerta
int alertThreshold = int.parse(stdin.readLineSync()!);
// TODO: Scrivi il tuo codice qui sotto
// Usa il metodo any() per verificare se una lettura dei sensori è >= alla soglia di allerta
// Stampa i risultati nel formato richiesto
print('Building: $buildingName');
print('Sensor readings: $sensorReadings');
print('Alert threshold: $alertThreshold');
print('Checking for readings >= $alertThreshold');
// Stampa il risultato dell'attivazione dell'allerta e 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