'map'으로 변환하기
Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 10번째.
리스트의 모든 요소를 새로운 것으로 변환해야 할 때, Dart는 강력한 map() 메서드를 제공합니다. 이 메서드는 리스트의 각 요소에 변환 함수를 적용하고 변환된 모든 결과를 포함하는 새로운 리스트를 생성합니다.
map() 메서드는 각 요소가 어떻게 변환되어야 하는지를 정의하는 함수를 매개변수로 받습니다. 이 함수는 원본 리스트의 각 요소를 전달받아 변환된 버전을 반환합니다. 그런 다음 map() 메서드는 이 모든 변환된 값들을 모아서 새로운 리스트를 생성합니다.
List<int> numbers = [1, 2, 3, 4, 5];
// 각 숫자를 두 배로 변환합니다
var doubled = numbers.map((number) => number * 2);
print(doubled); // (2, 4, 6, 8, 10)이 접근 방식은 수동으로 새 리스트를 생성하고 루프를 사용하여 각 요소를 변환하는 것보다 훨씬 더 우아합니다. map() 메서드는 함수형 프로그래밍의 핵심 개념을 나타내며, 데이터 변환을 명확하고 간결하게 표현할 수 있게 해줍니다.
챌린지
쉬움상점 인벤토리의 모든 품목에 백분율 기반 가격 조정을 적용하여 제품 가격 시스템을 관리하는 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:
- 상점 이름을 나타내는 문자열 입력을 읽습니다.
- 원래 제품 가격을 나타내는 여러 개의 소수 입력을 읽습니다 (입력은
-1을 받으면 종료됩니다). - 백분율 조정값(가격 인상의 경우 양수, 할인의 경우 음수)을 나타내는 소수 입력을 읽습니다.
map()메서드를 사용하여 백분율 조정을 적용함으로써 각 가격을 변환합니다.- 아래에 표시된 정확한 형식으로 가격 조정 결과를 출력합니다.
예를 들어, 상점 이름이 "Tech Store"이고, 가격이 99.99, 149.50, 79.99, 199.99이며, 조정값이 15.0 (15% 인상)인 경우, 프로그램은 다음과 같이 출력해야 합니다:
Store: Tech Store
Original prices: [99.99, 149.5, 79.99, 199.99]
Applying 15.0% adjustment
Adjusted prices: (114.9885, 171.925, 91.9885, 229.9885)
Total items processed: 4
Status: Price adjustment completed상점 이름이 "Fashion Outlet"이고, 가격이 29.99, 45.00이며, 조정값이 -20.0 (20% 할인)인 경우, 프로그램은 다음과 같이 출력해야 합니다:
Store: Fashion Outlet
Original prices: [29.99, 45.0]
Applying -20.0% adjustment
Adjusted prices: (23.992, 36.0)
Total items processed: 2
Status: Price adjustment completed상점 이름이 "Book Corner"이고 단 하나의 가격 12.50이 제공되며 조정값이 0.0인 경우, 프로그램은 다음과 같이 출력해야 합니다:
Store: Book Corner
Original prices: [12.5]
Applying 0.0% adjustment
Adjusted prices: (12.5)
Total items processed: 1
Status: Price adjustment completed프로그램은 originalPrice * (1 + percentage / 100) 공식을 사용하여 새 가격을 계산하는 변환 함수와 함께 map() 메서드를 사용해야 합니다. map() 메서드는 조정된 모든 가격을 포함하는 iterable을 반환해야 하며, 이는 괄호 형식으로 표시됩니다.
치트 시트
map() 메서드는 각 요소에 함수를 적용하고 그 결과로 새로운 리스트를 생성하여 리스트의 모든 요소를 변환합니다.
map() 메서드는 변환을 정의하는 함수를 매개변수로 받습니다. 이 함수는 각 요소를 전달받아 변환된 버전을 반환합니다:
List<int> numbers = [1, 2, 3, 4, 5];
// 각 숫자를 두 배로 변환합니다
var doubled = numbers.map((number) => number * 2);
print(doubled); // (2, 4, 6, 8, 10)이는 수동으로 새로운 리스트를 생성하고 변환을 위해 루프를 사용하는 것보다 더 깔끔한 방식입니다.
직접 해보기
import 'dart:io';
void main() {
// 상점 이름 읽기
String? storeName = stdin.readLineSync();
// -1이 입력될 때까지 가격 읽기
List<double> prices = [];
while (true) {
String? input = stdin.readLineSync();
double price = double.parse(input!);
if (price == -1) {
break;
}
prices.add(price);
}
// 조정 백분율 읽기
String? adjustmentInput = stdin.readLineSync();
double adjustment = double.parse(adjustmentInput!);
// TODO: 아래에 코드를 작성하세요
// map() 메서드를 사용하여 모든 가격에 백분율 조정을 적용하세요
// 공식: originalPrice * (1 + percentage / 100)
// 결과 출력
print('Store: $storeName');
print('Original prices: $prices');
print('Applying $adjustment% adjustment');
// 조정된 가격을 괄호 형식으로 출력
// 처리된 총 항목 수 출력
// 상태 메시지 출력
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 & 흐름의 모든 레슨
1고급 리스트 조작
리스트 속성: first 및 last리스트 상태: isEmpty 및 isNotEmpty리스트 뒤집기리스트에 추가: insert리스트 요소 제거: removeWhere리스트에서 찾기: indexOf리스트 정렬리스트 섞기요약 - 리스트 정리 도구2함수형 리스트 연산
'map'으로 변환하기'where'로 필터링하기'.toList()' 사용하기'any'로 조건 확인하기'every'로 조건 확인하기'firstWhere'로 찾기요약 - 데이터 필터링