Menu
Coddy logo textTech

Transformieren mit 'map'

Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 10 von 65.

Wenn Sie jedes Element in einer Liste in etwas Neues umwandeln müssen, bietet Dart die leistungsstarke map()-Methode. Diese Methode wendet eine Transformationsfunktion auf jedes Element in der Liste an und erzeugt ein neues lazy Iterable der transformierten Ergebnisse (rufen Sie .toList() auf, um eine Liste zu erhalten).

Die map()-Methode nimmt eine Funktion als Parameter entgegen, die definiert, wie jedes Element transformiert werden soll. Diese Funktion erhält jedes Element aus der ursprünglichen Liste und gibt die transformierte Version zurück. Die map()-Methode sammelt dann all diese transformierten Werte in einer neuen Liste.

List<int> numbers = [1, 2, 3, 4, 5];

// Transformiere jede Zahl durch Verdoppeln
var doubled = numbers.map((number) => number * 2);
print(doubled);  // (2, 4, 6, 8, 10)

Dieser Ansatz ist viel eleganter, als manuell eine neue Liste zu erstellen und eine Schleife zu verwenden, um jedes Element zu transformieren. Die map()-Methode stellt ein grundlegendes Konzept der funktionalen Programmierung dar, das es Ihnen ermöglicht, Datentransformationen auf klare und prägnante Weise auszudrücken.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Programm, das ein Produktpreissystem verwaltet, indem es prozentuale Preisanpassungen auf alle Artikel in einem Inventar anwendet. Ihr Programm sollte:

  1. Eine String-Eingabe lesen, die den Geschäftsnamen repräsentiert
  2. Mehrere Dezimal-Eingaben lesen, die die ursprünglichen Produktpreise repräsentieren (die Eingabe endet, wenn Sie -1 erhalten)
  3. Eine Dezimal-Eingabe lesen, die die prozentuale Anpassung repräsentiert (positiv für Preiserhöhung, negativ für Rabatt)
  4. Die map()-Methode verwenden, um jeden Preis durch Anwendung der prozentualen Anpassung zu transformieren
  5. Die Ergebnisse der Preisanpassung im unten gezeigten exakten Format ausgeben

Wenn zum Beispiel der Geschäftsname "Tech Store" ist, die Preise 99.99, 149.50, 79.99, 199.99 sind und die Anpassung 15.0 (15% Erhöhung) beträgt, sollte Ihr Programm Folgendes ausgeben:

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

Wenn der Geschäftsname "Fashion Outlet" ist, die Preise 29.99, 45.00 sind und die Anpassung -20.0 (20% Rabatt) beträgt, sollte Ihr Programm Folgendes ausgeben:

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

Wenn der Geschäftsname "Book Corner" ist und nur ein Preis 12.50 mit einer Anpassung von 0.0 angegeben wird, sollte Ihr Programm Folgendes ausgeben:

Store: Book Corner
Original prices: [12.5]
Applying 0.0% adjustment
Adjusted prices: (12.5)
Total items processed: 1
Status: Price adjustment completed

Ihr Programm muss die map()-Methode mit einer Transformationsfunktion verwenden, die den neuen Preis mit der Formel originalPrice * (1 + percentage / 100) berechnet. Die map()-Methode sollte ein Iterable zurückgeben, das alle angepassten Preise enthält, welche im Klammerformat angezeigt werden.

Probier es selbst

import 'dart:io';

void main() {
  // Geschäftsnamen lesen
  String? storeName = stdin.readLineSync();
  
  // Preise lesen, bis -1 eingegeben wird
  List<double> prices = [];
  while (true) {
    String? input = stdin.readLineSync();
    double price = double.parse(input!);
    if (price == -1) {
      break;
    }
    prices.add(price);
  }
  
  // Prozentuale Anpassung lesen
  String? adjustmentInput = stdin.readLineSync();
  double adjustment = double.parse(adjustmentInput!);
  
  // TODO: Schreibe deinen Code unten
  // Verwende die map() Methode, um die prozentuale Anpassung auf alle Preise anzuwenden
  // Formel: originalPrice * (1 + percentage / 100)
  
  // Ergebnisse ausgeben
  print('Store: $storeName');
  print('Original prices: $prices');
  print('Applying $adjustment% adjustment');
  // Angepasste Preise im Klammerformat ausgeben
  // Gesamtzahl der verarbeiteten Artikel ausgeben
  // Statusmeldung ausgeben
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf