'any' による条件チェック
CoddyのDartジャーニー「論理とフロー」セクションの一部 — レッスン 13/65。
リスト内の少なくとも1つの要素が特定の条件を満たしているかどうかを、すべての要素を調べることなく確認したい場合があります。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このメソッドは、少なくとも1つの項目が特定の基準を満たしているかどうかを確認する必要があるバリデーションのシナリオで特に便利です。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() メソッドは、リスト内の少なくとも1つの要素が特定の条件を満たしているかどうかを確認します。テスト条件を満たす最初の要素が見つかるとすぐに true を返し、どの要素もテストに合格しない場合は false を返します。
List<double> prices = [15.99, 45.50, 120.00, 8.75];
// 100ドルを超えるアイテムがあるか確認する
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem); // trueany() メソッドは、一致するものが見つかるとすぐにチェックを停止するため効率的であり、何かが存在するかどうかだけを知る必要があるバリデーションのシナリオに最適です。
自分で試してみよう
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リストのソートリストのシャッフルまとめ - リストオーガナイザー2関数型リスト操作
'map' による変換'where' によるフィルタリング'.toList()' の使用'any' による条件チェック'every' による条件判定'firstWhere' による検索まとめ:データフィルタリング