Przekształcanie za pomocą 'map'
Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 10 z 65.
Gdy chcesz przekształcić każdy element listy w coś nowego, Dart udostępnia potężną metodę map(). Ta metoda stosuje funkcję przekształcającą do każdego elementu listy i tworzy nowe leniwe Iterable z przekształconymi wynikami (wywołaj .toList(), aby otrzymać listę).
Metoda map() przyjmuje jako parametr funkcję, która określa, jak należy przekształcić każdy element. Ta funkcja otrzymuje każdy element z oryginalnej listy i zwraca jego przekształconą wersję. Następnie metoda map() zbiera wszystkie te przekształcone wartości do nowej listy.
List<int> numbers = [1, 2, 3, 4, 5];
// Przekształć każdą liczbę, podwajając ją
var doubled = numbers.map((number) => number * 2);
print(doubled); // (2, 4, 6, 8, 10)To podejście jest znacznie bardziej eleganckie niż ręczne tworzenie nowej listy i używanie pętli do przekształcania każdego elementu. Metoda map() reprezentuje fundamentalną koncepcję programowania funkcyjnego, umożliwiając wyrażanie przekształceń danych w jasny i zwięzły sposób.
Wyzwanie
ŁatwyUtwórz program, który zarządza systemem wyceny produktów, stosując procentowe korekty cen wszystkich artykułów w asortymencie sklepu. Twój program powinien:
- Odczytać dane wejściowe typu string reprezentujące nazwę sklepu
- Odczytać wiele wartości dziesiętnych reprezentujących pierwotne ceny produktów (wprowadzanie danych zakończy się po otrzymaniu
-1) - Odczytać wartość dziesiętną reprezentującą korektę procentową (wartość dodatnia oznacza podwyżkę ceny, a ujemna — rabat)
- Użyć metody
map(), aby przekształcić każdą cenę, stosując korektę procentową - Wyświetlić wyniki korekty cen w dokładnie takim formacie, jak pokazano poniżej
Na przykład, jeśli nazwa sklepu to "Tech Store", ceny wynoszą 99.99, 149.50, 79.99, 199.99, a korekta wynosi 15.0 (podwyżka o 15%), Twój program powinien wyświetlić:
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 completedJeśli nazwa sklepu to "Fashion Outlet", ceny wynoszą 29.99, 45.00, a korekta wynosi -20.0 (rabat 20%), Twój program powinien wyświetlić:
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 completedJeśli nazwa sklepu to "Book Corner" i podano tylko jedną cenę 12.50 z korektą 0.0, Twój program powinien wyświetlić:
Store: Book Corner
Original prices: [12.5]
Applying 0.0% adjustment
Adjusted prices: (12.5)
Total items processed: 1
Status: Price adjustment completedTwój program musi używać metody map() z funkcją przekształcającą, która oblicza nową cenę za pomocą wzoru: originalPrice * (1 + percentage / 100). Metoda map() powinna zwracać iterowalny obiekt zawierający wszystkie skorygowane ceny, które zostaną wyświetlone w nawiasach.
Spróbuj swoich sił
import 'dart:io';
void main() {
// Wczytaj nazwę sklepu
String? storeName = stdin.readLineSync();
// Wczytuj ceny, aż napotkasz -1
List<double> prices = [];
while (true) {
String? input = stdin.readLineSync();
double price = double.parse(input!);
if (price == -1) {
break;
}
prices.add(price);
}
// Wczytaj korektę procentową
String? adjustmentInput = stdin.readLineSync();
double adjustment = double.parse(adjustmentInput!);
// TODO: Napisz swój kod poniżej
// Użyj metody map(), aby zastosować korektę procentową do wszystkich cen
// Wzór: originalPrice * (1 + percentage / 100)
// Wyświetl wyniki
print('Store: $storeName');
print('Original prices: $prices');
print('Applying $adjustment% adjustment');
// Wyświetl skorygowane ceny w nawiasach
// Wyświetl łączną liczbę przetworzonych pozycji
// Wyświetl komunikat o stanie
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Zaawansowana manipulacja listami
Właściwości listy: first i lastStan listy: isEmpty i isNotEmpOdwracanie listyDodawanie do listy: insertUsuwanie z listy: removeWhereWyszukiwanie na liście: indexOfSortowanie listyMieszanie elementów listyPodsumowanie – Organizator listy4Zaawansowane operacje na mapach
Iterowanie po mapieSprawdzanie kluczy i wartościWłaściwości mapy: klucze i wartościDodawanie warunkowe: putIfAbsentUsuwanie wpisów z mapyZagnieżdżone mapyPodsumowanie – aktualizacja stanu magazynowego2Operacje funkcyjne na listach
Przekształcanie za pomocą 'map'Filtrowanie za pomocą 'where'Używanie '.toList()'Sprawdzanie warunków za pomocą 'any'Warunki z użyciem 'every'Wyszukiwanie za pomocą 'firstWhere'Podsumowanie — filtrowanie danych5Projekt: Kalkulator koszyka zakupowego
Konfiguracja projektuDodawanie produktów do koszyka3Zbiory
Czym jest zbiór?Tworzenie zbioruDodawanie i usuwanie elementów ze zbiorówSprawdzanie, czy element znajduje się w zbiorzeKonwersja listy na zbiórSuma zbiorówCzęść wspólna zbiorówRóżnica zbiorówPodsumowanie — unikalna lista gościPoćwicz samodzielnie: Kompilator Dart online