使用 'any' 检查条件
本课属于 Coddy Dart 学习旅程的“逻辑与流程控制”单元。第 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"。
亲手试试
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');
// 输出是否触发警报的结果和状态消息
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程控制中的所有课
自己练习: Dart 在线编译器