Menu
Coddy logo textTech

Erweiterte For-Schleife

Teil des Abschnitts Grundlagen der Rust-Journey von Coddy. Lektion 66 von 75.

Es gibt verschiedene Möglichkeiten, über ein Array zu iterieren. Hier sind einige davon:
Betrachte das folgende Array:

let numbers = [1, 2, 3, 4, 5];
  • Direkter Iterator:

    for num in numbers.iter() {}
    // Werte: 1, 2, 3, 4, 5
  • Index & Wert:

    for (index, value) in numbers.iter().enumerate() { }
    // Werte: (0,1), (1,2), (2,3), (3,4), (4,5)
  • Slices mit bestimmter Größe:

    for chunk in numbers.chunks(2) { }
    // Werte: [1,2], [3,4], [5]

    Jeder Chunk ist ein Slice, daher kannst du Slice-Methoden darauf verwenden. Beispielsweise gibt chunk.len() zurück, wie viele Elemente dieser Chunk enthält. Der letzte Chunk kann kleiner sein, wenn sich das Array nicht gleichmäßig teilen lässt.

Du kannst auch .enumerate() an .chunks() anhängen, um gleichzeitig einen Index und den Chunk zu erhalten:

for (i, chunk) in numbers.chunks(2).enumerate() { }
// Werte: (0,[1,2]), (1,[3,4]), (2,[5])

Hier erzeugt .chunks(2) zuerst die Slices, dann versieht .enumerate() jeden davon mit einem Zähler, sodass i der Chunk-Index und chunk der Slice ist.

  • Mit Mutation iterieren:

    for num in numbers.iter_mut() { 
    	*num *= 2;
    }
    // Array wird zu: [2, 4, 6, 8, 10]
challenge icon

Aufgabe

Einfach

Erstelle ein Programm, das eine Einkaufsliste mit Artikeln und deren Preisen verarbeitet und verschiedene Ansichten der Daten bereitstellt.

Das Programm sollte:

  1. Die Nummer und den Preis jedes Artikels ausgeben (mit enumerate). Verwende das Format Item N: $Price (z. B. Item 1: $2.75).
  2. Die Preise paarweise (mit chunks) als „Bundle-Angebote“ ausgeben. Wenn ein Bundle 2 Artikel enthält, gib die Summe aus: Bundle N: $Price1 + $Price2 = $Sum. Wenn es nur 1 Artikel enthält, gib Folgendes aus: Bundle N: $Price.
  3. Auf alle Preise einen Rabatt von 10 % anwenden (mit iter_mut).
  4. Die endgültigen rabattierten Preise ausgeben, jeden in einer neuen Zeile und mit 2 Dezimalstellen formatiert (z. B. $2.48).

Hinweis: Du kannst Iteratoren miteinander verketten. Zum Beispiel liefert prices.chunks(2).enumerate() gleichzeitig sowohl den Chunk-Index als auch den Chunk-Slice. Jeder chunk ist ein Slice, daher kannst du chunk.len() darauf aufrufen und mit chunk[0], chunk[1] usw. darauf zugreifen.

Erwartetes Ausgabeformat für Preise:
Verwende ${:.2}, um Preise mit 2 Dezimalstellen zu formatieren.

Der genaue Text lautet Bundle 4: $7.90.

Probier es selbst

fn main() {
    let mut prices = [2.75, 1.50, 5.00, 3.5, 4.1, 2.25, 7.9];

    println!("Original Prices:");
    // TODO: Verwende enumerate(), um jede Artikelnummer und den Preis auszugeben
    // Hinweis: prices.iter().enumerate() liefert (index, &price)-Paare
    // Formatiere Preise auf 2 Dezimalstellen mit {:.2}, siehe die Anweisungen für das genaue Format


    println!("\nBundle Deals:");
    // TODO: Verkette chunks(2) und enumerate() miteinander: prices.chunks(2).enumerate()
    // Dies liefert (index, chunk)-Paare, jeder chunk ist ein Slice, also sagt dir chunk.len() seine Größe
    // If chunk.len() == 2, print: "Bundle 1: $2.75 + $1.50 = $4.25"
    // Wenn chunk.len() == 1, gib die in den Anweisungen beschriebene Einzelartikel-Zeile aus
    // Verwende {:.2}, um alle Preise auf 2 Dezimalstellen zu formatieren


    // TODO: Use iter_mut() to apply a 10% discount to all prices
    // Hinweis: multipliziere jeden *price mit 0.9


    println!("\nPrices after 10% discount:");
    // TODO: Gib jeden rabattierten Preis formatiert auf 2 Dezimalstellen aus
    // Das erwartete Ausgabeformat ist in den Anweisungen gezeigt

}
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 Grundlagen

Übe selbstständig: Online-Rust-Compiler