Menu
Coddy logo textTech

Erweiterte For-Schleife

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

Es gibt verschiedene Möglichkeiten, über ein Array zu iterieren, hier sind einige davon:
Betrachten Sie 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 of specific size:

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

    Each chunk is a slice, so you can use slice methods on it — for example, chunk.len() returns how many elements are in that chunk. The last chunk may be smaller if the array doesn't divide evenly.

Sie können 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, und .enumerate() umschließt jedes davon mit einem Zähler — sodass i der Chunk-Index und chunk das 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 liefert.

Das Programm sollte:

  1. Jede Artikelnummer und jeden Preis ausgeben (unter Verwendung von enumerate). Formatiere dies als Item N: $Price (z. B. Item 1: $2.75).
  2. Die Preise paarweise (unter Verwendung von chunks) als "bundle deals" ausgeben. Wenn ein Paket 2 Artikel enthält, gib die Summe aus: Bundle N: $Price1 + $Price2 = $Sum. Wenn es nur 1 Artikel enthält, gib aus: Bundle N: $Price.
  3. Einen Rabatt von 10% auf alle Preise anwenden (unter Verwendung von iter_mut).
  4. Die finalen rabattierten Preise jeweils in einer neuen Zeile ausgeben, formatiert auf 2 Nachkommastellen (z. B. $2.48).

Hint: Du kannst Iteratoren miteinander verketten — zum Beispiel liefert prices.chunks(2).enumerate() sowohl den Chunk-Index als auch den Chunk-Slice auf einmal. Jedes chunk ist ein Slice, sodass du chunk.len() darauf aufrufen und mit chunk[0], chunk[1] usw. darauf zugreifen kannst.

Expected output format for prices:
Verwende ${:.2}, um Preise auf 2 Nachkommastellen zu formatieren.

Der exakte 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 gibt dir chunk.len() seine Größe an
    // 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: Verwende iter_mut(), um einen 10%-Rabatt auf alle Preise anzuwenden
    // Hinweis: multipliziere jedes *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 Fundamentals

Übe selbstständig: Online-Rust-Compiler