Bedingungen prüfen mit 'any'
Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 13 von 65.
Manchmal müssen Sie prüfen, ob mindestens ein Element in einer Liste eine bestimmte Bedingung erfüllt, ohne jedes einzelne Element untersuchen zu müssen. Die Methode any() bietet eine effiziente Möglichkeit hierfür, indem sie true zurückgibt, sobald sie das erste Element findet, das Ihre Testbedingung erfüllt.
Die Methode any() nimmt eine Testfunktion entgegen, die für jedes Element true oder false zurückgibt. Wenn ein Element den Test besteht, gibt any() sofort true zurück. Wenn nach der Überprüfung der gesamten Liste kein Element den Test besteht, gibt sie false zurück.
List<double> prices = [15.99, 45.50, 120.00, 8.75];
// Prüfen, ob ein Artikel mehr als 100 $ kostet
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem); // trueDiese Methode ist besonders nützlich für Validierungsszenarien, in denen Sie wissen müssen, ob mindestens ein Element bestimmte Kriterien erfüllt. Die Methode any() beendet die Prüfung, sobald sie eine Übereinstimmung findet, was sie effizienter macht als das manuelle Durchlaufen der gesamten Liste, wenn Sie nur wissen müssen, ob etwas existiert.
Aufgabe
EinfachErstellen Sie ein Programm, das ein Sicherheitssystem verwaltet, indem es prüft, ob ein Sensor in einem Gebäude verdächtige Aktivitäten erkannt hat. Ihr Programm sollte:
- Einen String-Input einlesen, der den Gebäudenamen darstellt
- Mehrere Ganzzahl-Inputs einlesen, die Sensormesswerte von verschiedenen Etagen darstellen (die Eingabe endet, wenn Sie
-1erhalten) - Einen Ganzzahl-Input einlesen, der den Schwellenwert für den Alarm darstellt
- Die Methode
any()verwenden, um zu prüfen, ob ein Sensormesswert größer oder gleich dem Alarmschwellenwert ist - Die Ergebnisse der Sicherheitsüberwachung in dem unten gezeigten exakten Format ausgeben
Wenn zum Beispiel der Gebäudename "Office Tower" ist, die Sensormesswerte 15, 23, 8, 45, 12 sind und der Alarmschwellenwert 40 ist, sollte Ihr Programm Folgendes ausgeben:
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 requiredWenn der Gebäudename "Shopping Mall" ist, die Sensormesswerte 18, 25, 12, 30 sind und der Alarmschwellenwert 50 ist, sollte Ihr Programm Folgendes ausgeben:
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 detectedWenn der Gebäudename "Warehouse" ist, die Sensormesswerte 75, 82 sind und der Alarmschwellenwert 70 ist, sollte Ihr Programm Folgendes ausgeben:
Building: Warehouse
Sensor readings: [75, 82]
Alert threshold: 70
Checking for readings >= 70
Alert triggered: true
Status: Security breach detected - immediate response requiredIhr Programm muss die Methode any() verwenden, um zu prüfen, ob ein Sensormesswert größer oder gleich dem Alarmschwellenwert ist. Zeigen Sie "Security breach detected - immediate response required" an, wenn ein Sensor den Alarm auslöst, oder "All systems normal - no threats detected", wenn kein Sensor den Schwellenwert überschreitet.
Spickzettel
Die Methode any() prüft, ob mindestens ein Element in einer Liste eine bestimmte Bedingung erfüllt. Sie gibt true zurück, sobald sie das erste Element findet, das die Testbedingung erfüllt, oder false, wenn kein Element den Test besteht.
List<double> prices = [15.99, 45.50, 120.00, 8.75];
// Prüfen, ob ein Artikel mehr als 100 $ kostet
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem); // trueDie Methode any() ist effizient, da sie die Prüfung abbricht, sobald sie eine Übereinstimmung findet. Dies macht sie ideal für Validierungsszenarien, in denen man nur wissen muss, ob etwas existiert.
Probier es selbst
import 'dart:io';
void main() {
// Gebäudenamen lesen
String? buildingName = stdin.readLineSync();
// Sensormesswerte lesen, bis -1 eingegeben wird
List<int> sensorReadings = [];
while (true) {
int reading = int.parse(stdin.readLineSync()!);
if (reading == -1) {
break;
}
sensorReadings.add(reading);
}
// Alarmschwellenwert lesen
int alertThreshold = int.parse(stdin.readLineSync()!);
// TODO: Schreiben Sie Ihren Code unten
// Verwenden Sie die any()-Methode, um zu prüfen, ob ein Sensormesswert >= Alarmschwellenwert ist
// Ergebnisse im erforderlichen Format ausgeben
print('Building: $buildingName');
print('Sensor readings: $sensorReadings');
print('Alert threshold: $alertThreshold');
print('Checking for readings >= $alertThreshold');
// Ergebnis des ausgelösten Alarms und Statusmeldung ausgeben
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittene Listenmanipulation
Listen-Eigenschaften: first & lastListen-Status: isEmpty & isNotEmptyEine Liste umkehrenHinzufügen zu einer Liste: insertElemente aus Liste entfernen: removeWhereSuchen in einer Liste: indexOfEine Liste sortierenEine Liste mischenZusammenfassung – Listen-Organizer4Fortgeschrittene Map-Manipulation
Über eine Map iterierenPrüfen auf Schlüssel und WerteMap-Eigenschaften: keys & valuesBedingtes Hinzufügen: putIfAbsentEinträge aus einer Map entfernenVerschachtelte MapsRückblick – Inventar-Update7Fortgeschrittene Funktionen
Anonyme FunktionenFunktionen als Argumente übergebenClosures verstehenEinführung in die RekursionRekursive Funktion: CountdownRekursive Funktion: FakultätZusammenfassung – List Processor10Abschluss-Herausforderungen
Herausforderung: NotensortiererHerausforderung: VokalzählerHerausforderung: FizzBuzz2Funktionale Listenoperationen
Transformieren mit 'map'Filtern mit 'where''.toList()' verwendenBedingungen prüfen mit 'any'Bedingungen mit 'every'Suchen mit 'firstWhere'Zusammenfassung – Datenfilterung3Sets
Was ist ein Set?Ein Set erstellenHinzufügen und Entfernen in SetsPrüfen auf Elemente in einem SetEine Liste in ein Set umwandelnSet-VereinigungSet-SchnittmengeSet-DifferenzRückblick – Einzigartige Gästeliste