Sprawdzanie warunków za pomocą 'any'
Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 13 z 65.
Czasami trzeba sprawdzić, czy co najmniej jeden element na liście spełnia określony warunek, bez konieczności sprawdzania każdego elementu z osobna. Metoda any() pozwala zrobić to wydajnie, zwracając true, gdy tylko znajdzie pierwszy element spełniający warunek testowy.
Metoda any() przyjmuje funkcję testującą, która zwraca true lub false dla każdego elementu. Jeśli dowolny element przejdzie test, any() natychmiast zwraca true. Jeśli po sprawdzeniu całej listy żaden element nie przejdzie testu, zwraca false.
List<double> prices = [15.99, 45.50, 120.00, 8.75];
// Sprawdź, czy którykolwiek produkt kosztuje więcej niż $100
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem); // trueTa metoda jest szczególnie przydatna w przypadku walidacji, gdy musisz sprawdzić, czy co najmniej jeden element spełnia określone kryteria. Metoda any() przestaje sprawdzać, gdy tylko znajdzie dopasowanie, dzięki czemu jest wydajniejsza niż ręczne przechodzenie przez całą listę, gdy chcesz tylko sprawdzić, czy coś istnieje.
Wyzwanie
ŁatwyUtwórz program, który zarządza systemem bezpieczeństwa, sprawdzając, czy którykolwiek czujnik w budynku wykrył podejrzaną aktywność. Twój program powinien:
- Odczytać tekstowe dane wejściowe reprezentujące nazwę budynku
- Odczytać wiele wartości całkowitych reprezentujących odczyty czujników z różnych pięter (wprowadzanie danych zakończy się po otrzymaniu
-1) - Odczytać wartość całkowitą reprezentującą próg alarmowy
- Użyć metody
any(), aby sprawdzić, czy którykolwiek odczyt czujnika jest większy lub równy progowi alarmowemu - Wyświetlić wyniki monitorowania bezpieczeństwa w dokładnym formacie pokazanym poniżej
Na przykład, jeśli nazwa budynku to "Office Tower", odczyty czujników to 15, 23, 8, 45, 12, a próg alarmowy wynosi 40, program powinien wyświetlić:
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 requiredJeśli nazwa budynku to "Shopping Mall", odczyty czujników to 18, 25, 12, 30, a próg alarmowy wynosi 50, program powinien wyświetlić:
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 detectedJeśli nazwa budynku to "Warehouse", odczyty czujników to 75, 82, a próg alarmowy wynosi 70, program powinien wyświetlić:
Building: Warehouse
Sensor readings: [75, 82]
Alert threshold: 70
Checking for readings >= 70
Alert triggered: true
Status: Security breach detected - immediate response requiredTwój program musi używać metody any(), aby sprawdzić, czy którykolwiek odczyt czujnika jest większy lub równy progowi alarmowemu. Wyświetl "Security breach detected - immediate response required", jeśli którykolwiek czujnik wywoła alarm, lub "All systems normal - no threats detected", jeśli żaden czujnik nie przekracza progu.
Spróbuj swoich sił
import 'dart:io';
void main() {
// Wczytaj nazwę budynku
String? buildingName = stdin.readLineSync();
// Wczytuj odczyty czujników, aż pojawi się -1
List<int> sensorReadings = [];
while (true) {
int reading = int.parse(stdin.readLineSync()!);
if (reading == -1) {
break;
}
sensorReadings.add(reading);
}
// Wczytaj próg alarmowy
int alertThreshold = int.parse(stdin.readLineSync()!);
// TODO: Napisz swój kod poniżej
// Użyj metody any(), aby sprawdzić, czy którykolwiek odczyt czujnika jest >= progowi alarmowemu
// Wyświetl wyniki w wymaganym formacie
print('Building: $buildingName');
print('Sensor readings: $sensorReadings');
print('Alert threshold: $alertThreshold');
print('Checking for readings >= $alertThreshold');
// Wyświetl informację o uruchomieniu alarmu oraz 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