'any'로 조건 확인하기
Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 13번째.
때로는 모든 요소를 일일이 검사하지 않고도, 리스트의 요소 중 적어도 하나가 특정 조건을 충족하는지 확인해야 할 때가 있습니다. 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); // 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'로 찾기요약 - 데이터 필터링