Menu
Coddy logo textTech

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.

challenge icon

Wyzwanie

Łatwy

Utwó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:

  1. Odczytać dane wejściowe typu string reprezentujące nazwę sklepu
  2. Odczytać wiele wartości dziesiętnych reprezentujących pierwotne ceny produktów (wprowadzanie danych zakończy się po otrzymaniu -1)
  3. Odczytać wartość dziesiętną reprezentującą korektę procentową (wartość dodatnia oznacza podwyżkę ceny, a ujemna — rabat)
  4. Użyć metody map(), aby przekształcić każdą cenę, stosując korektę procentową
  5. 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 completed

Jeś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 completed

Jeś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 completed

Twó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
}
quiz iconSprawdź się

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

Poćwicz samodzielnie: Kompilator Dart online