Проверка условий с помощью 'any'
Часть раздела Логика и управление потоком путешествия по Dart на Coddy — урок 13 из 65.
Иногда вам нужно проверить, соответствует ли хотя бы один элемент в списке определенному условию, не проверяя каждый отдельный элемент. Метод any() предоставляет эффективный способ сделать это, возвращая true, как только он находит первый элемент, удовлетворяющий вашему условию тестирования.
Метод any() принимает функцию тестирования, которая возвращает true или false для каждого элемента. Если какой-либо элемент проходит тест, any() немедленно возвращает true. Если после проверки всего списка ни один элемент не прошел тест, он возвращает false.
List<double> prices = [15.99, 45.50, 120.00, 8.75];
// Проверить, стоит ли какой-либо товар больше $100
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem); // trueЭтот метод особенно полезен в сценариях валидации, когда вам нужно знать, соответствует ли хотя бы один элемент определенным критериям. Метод any() прекращает проверку, как только находит совпадение, что делает его более эффективным, чем перебор всего списка вручную, когда вам нужно лишь узнать о наличии чего-либо.
Задание
ЛегкоСоздайте программу, которая управляет системой безопасности, проверяя, не зафиксировал ли какой-либо датчик в здании подозрительную активность. Ваша программа должна:
- Считать строковый ввод, представляющий название здания
- Считать несколько целых чисел, представляющих показания датчиков с разных этажей (ввод закончится, когда вы получите
-1) - Считать целое число, представляющее пороговое значение тревоги
- Использовать метод
any(), чтобы проверить, есть ли показания датчика, которые больше или равны порогу тревоги - Вывести результаты мониторинга безопасности в точном формате, показанном ниже
Например, если название здания — "Office Tower", показания датчиков — 15, 23, 8, 45, 12, а порог тревоги — 40, ваша программа должна вывести:
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 requiredЕсли название здания — "Shopping Mall", показания датчиков — 18, 25, 12, 30, а порог тревоги — 50, ваша программа должна вывести:
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 detectedЕсли название здания — "Warehouse", показания датчиков — 75, 82, а порог тревоги — 70, ваша программа должна вывести:
Building: Warehouse
Sensor readings: [75, 82]
Alert threshold: 70
Checking for readings >= 70
Alert triggered: true
Status: Security breach detected - immediate response requiredВаша программа должна использовать метод any(), чтобы проверить, превышает ли какое-либо показание датчика порог тревоги или равно ему. Выведите "Security breach detected - immediate response required", если какой-либо датчик вызывает тревогу, или "All systems normal - no threats detected", если ни один датчик не превысил порог.
Шпаргалка
Метод any() проверяет, соответствует ли хотя бы один элемент в списке определенному условию. Он возвращает true, как только находит первый элемент, удовлетворяющий условию теста, или false, если ни один элемент не прошел проверку.
List<double> prices = [15.99, 45.50, 120.00, 8.75];
// Проверить, стоит ли какой-либо товар больше $100
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem); // trueМетод any() эффективен, потому что он прекращает проверку, как только находит совпадение, что делает его идеальным для сценариев валидации, когда вам нужно только знать, существует ли что-то.
Попробуйте сами
import 'dart:io';
void main() {
// Считать название здания
String? buildingName = stdin.readLineSync();
// Считывать показания датчиков, пока не встретится -1
List<int> sensorReadings = [];
while (true) {
int reading = int.parse(stdin.readLineSync()!);
if (reading == -1) {
break;
}
sensorReadings.add(reading);
}
// Считать порог срабатывания тревоги
int alertThreshold = int.parse(stdin.readLineSync()!);
// TODO: Напишите свой код ниже
// Используйте метод any(), чтобы проверить, есть ли показания датчика >= порога тревоги
// Вывести результаты в требуемом формате
print('Building: $buildingName');
print('Sensor readings: $sensorReadings');
print('Alert threshold: $alertThreshold');
print('Checking for readings >= $alertThreshold');
// Вывести результат срабатывания тревоги и статусное сообщение
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутая работа со списками
Свойства списка: first и lastСостояние списка: isEmpty и isNotEmptyРазворот спискаДобавление в список: insertУдаление из списка: removeWhereПоиск в списке: indexOfСортировка спискаПеремешивание спискаИтоги — Органайзер списков4Продвинутая работа с Map
Итерация по MapПроверка ключей и значенийСвойства Map: keys и valuesУсловное добавление: putIfAbsentУдаление записей из MapВложенные MapИтоги — Обновление инвентаря2Функциональные операции со списками
Преобразование с помощью 'map'Фильтрация с помощью 'where'Использование '.toList()'Проверка условий с помощью 'any'Условия с 'every'Поиск с помощью 'firstWhere'Повторение — фильтрация данных5Проект: Калькулятор корзины
Настройка проектаДобавление товаров в корзину3Множества
Что такое множество?Создание множестваДобавление и удаление элементовПроверка наличия элементов в множествеПреобразование списка в множествоОбъединение множествПересечение множествРазность множествИтоги: уникальный список гостей