'firstWhere'로 찾기
Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 15번째.
특정 기준을 충족하는 목록의 특정 요소를 찾아야 할 때, firstWhere() 메서드는 효율적인 해결책을 제공합니다. 일치하는 모든 요소를 반환하는 필터링 메서드와 달리, firstWhere()는 조건을 충족하는 첫 번째 요소를 찾는 즉시 검색을 중단합니다.
firstWhere() 메서드는 각 요소에 대해 true 또는 false를 반환하는 테스트 함수를 인자로 받습니다. 이 메서드는 테스트를 통과하는 첫 번째 요소를 찾을 때까지 요소를 하나씩 검사하며, 해당 요소를 찾으면 즉시 그 요소를 반환합니다.
List<int> numbers = [1, 3, 8, 15, 22, 7];
// 첫 번째 짝수 찾기
int firstEven = numbers.firstWhere((number) => number % 2 == 0);
print(firstEven); // 8조건에 일치하는 요소가 없는 경우를 위해, firstWhere()는 선택적인 orElse 매개변수를 제공합니다. 이 매개변수는 일치하는 항목을 찾지 못했을 때 기본값을 반환하는 함수를 전달받아, 프로그램이 오류로 인해 중단되는 것을 방지합니다.
챌린지
쉬움즉각적인 조치가 필요한 첫 번째 고객 불만 사항을 찾아 고객 서비스 시스템을 관리하는 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:
- 부서 이름을 나타내는 문자열 입력을 읽습니다.
- 불만 사항의 우선순위 레벨을 나타내는 여러 정수 입력을 읽습니다 (입력은
-1을 받으면 종료됩니다). - 긴급 우선순위 임계값을 나타내는 정수 입력을 읽습니다.
firstWhere()메서드를 사용하여 긴급 임계값보다 크거나 같은 첫 번째 불만 사항의 우선순위 레벨을 찾습니다.- 아래에 표시된 정확한 형식으로 고객 서비스 결과를 출력합니다.
예를 들어, 부서 이름이 "Technical Support"이고, 우선순위 레벨이 3, 7, 2, 9, 4이며, 긴급 임계값이 8인 경우, 프로그램은 다음과 같이 출력해야 합니다:
Department: Technical Support
All complaints: [3, 7, 2, 9, 4]
Urgent threshold: 8
Searching for first complaint >= 8
First urgent complaint: 9
Status: Urgent complaint found - immediate action required부서 이름이 "Billing Department"이고, 우선순위 레벨이 4, 6, 3, 5이며, 긴급 임계값이 7인 경우, 프로그램은 다음과 같이 출력해야 합니다:
Department: Billing Department
All complaints: [4, 6, 3, 5]
Urgent threshold: 7
Searching for first complaint >= 7
First urgent complaint: Not found
Status: No urgent complaints - continue normal processing부서 이름이 "Sales Support"이고, 우선순위 레벨이 10, 2, 8이며, 긴급 임계값이 9인 경우, 프로그램은 다음과 같이 출력해야 합니다:
Department: Sales Support
All complaints: [10, 2, 8]
Urgent threshold: 9
Searching for first complaint >= 9
First urgent complaint: 10
Status: Urgent complaint found - immediate action required프로그램은 firstWhere() 메서드를 사용하여 긴급 임계값보다 크거나 같은 첫 번째 불만 사항 우선순위를 찾아야 합니다. 긴급한 불만 사항을 찾지 못한 경우, 첫 번째 긴급 불만 사항에 "Not found"를 표시하고 상태로 "No urgent complaints - continue normal processing"을 표시합니다. 긴급한 불만 사항을 찾은 경우, 우선순위 레벨을 표시하고 상태로 "Urgent complaint found - immediate action required"를 표시합니다.
치트 시트
firstWhere() 메서드는 특정 조건을 만족하는 리스트의 첫 번째 요소를 찾습니다. 일치하는 요소를 찾는 즉시 검색을 중단하고 해당 요소를 반환합니다.
List<int> numbers = [1, 3, 8, 15, 22, 7];
// 첫 번째 짝수 찾기
int firstEven = numbers.firstWhere((number) => number % 2 == 0);
print(firstEven); // 8조건에 일치하는 요소가 없을 때 기본값을 제공하려면 orElse 매개변수를 사용하세요:
// 일치하는 항목이 없으면 기본값을 반환합니다
int result = numbers.firstWhere(
(number) => number > 100,
orElse: () => -1
);직접 해보기
import 'dart:io';
void main() {
// 부서명 읽기
String? department = stdin.readLineSync();
// -1이 입력될 때까지 민원 우선순위 레벨 읽기
List<int> complaints = [];
while (true) {
int priority = int.parse(stdin.readLineSync()!);
if (priority == -1) break;
complaints.add(priority);
}
// 긴급 임계값 읽기
int urgentThreshold = int.parse(stdin.readLineSync()!);
// TODO: 아래에 코드를 작성하세요
// firstWhere() 메서드를 사용하여 urgentThreshold보다 크거나 같은 첫 번째 민원을 찾으세요
// 결과 출력
print('Department: $department');
print('All complaints: $complaints');
print('Urgent threshold: $urgentThreshold');
print('Searching for first complaint >= $urgentThreshold');
// 첫 번째 긴급 민원 결과 출력
// 상태 메시지 출력
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 & 흐름의 모든 레슨
1고급 리스트 조작
리스트 속성: first 및 last리스트 상태: isEmpty 및 isNotEmpty리스트 뒤집기리스트에 추가: insert리스트 요소 제거: removeWhere리스트에서 찾기: indexOf리스트 정렬리스트 섞기요약 - 리스트 정리 도구2함수형 리스트 연산
'map'으로 변환하기'where'로 필터링하기'.toList()' 사용하기'any'로 조건 확인하기'every'로 조건 확인하기'firstWhere'로 찾기요약 - 데이터 필터링