Menu
CoddyTech

Ciclo for avanzato

Fa parte della sezione Fondamenti del percorso Rust di Coddy. Lezione 66 di 75.

Esistono diversi modi per iterare su un array, eccone alcuni:
Considera il seguente array:

let numbers = [1, 2, 3, 4, 5];
  • Iteratore diretto:

    for num in numbers.iter() {}
    // Valori: 1, 2, 3, 4, 5
  • Indice & valore:

    for (index, value) in numbers.iter().enumerate() { }
    // Valori: (0,1), (1,2), (2,3), (3,4), (4,5)
  • Slice di dimensioni specifiche:

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

    Ogni chunk è una slice, quindi puoi usare i metodi delle slice, per esempio chunk.len() restituisce il numero di elementi in quel chunk. L'ultimo chunk può essere più piccolo se l'array non è divisibile in parti uguali.

Puoi anche concatenare .enumerate() a .chunks() per ottenere sia un indice sia il blocco contemporaneamente:

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

Qui, .chunks(2) produce prima le slice, poi .enumerate() avvolge ciascuna con un contatore, quindi i è l'indice del blocco e chunk è la slice.

  • Itera con mutazione:

    for num in numbers.iter_mut() { 
    	*num *= 2;
    }
    // L'array diventa: [2, 4, 6, 8, 10]
challenge icon

Sfida

Facile

Crea un programma che elabori una lista della spesa con articoli e relativi prezzi e fornisca diverse visualizzazioni dei dati.

Il programma dovrebbe:

  1. Stampare il numero e il prezzo di ogni articolo (usando enumerate). Formatta come Item N: $Price (ad esempio, Item 1: $2.75).
  2. Stampare i prezzi a coppie (usando chunks) come "bundle deals". Se una coppia contiene 2 articoli, stampa la somma: Bundle N: $Price1 + $Price2 = $Sum. Se contiene un solo articolo, stampa: Bundle N: $Price.
  3. Applicare uno sconto del 10% a tutti i prezzi (usando iter_mut).
  4. Stampare i prezzi finali scontati, ciascuno su una nuova riga, formattati con 2 cifre decimali (ad esempio, $2.48).

Suggerimento: Puoi concatenare gli iteratori, ad esempio, prices.chunks(2).enumerate() ti fornisce sia l'indice della porzione sia la porzione stessa. Ogni chunk è una slice, quindi puoi chiamarci chunk.len() e accedervi tramite indice con chunk[0], chunk[1], ecc.

Formato di output previsto per i prezzi:
Usa ${:.2} per formattare i prezzi con 2 cifre decimali.

Il testo esatto è Bundle 4: $7.90.

Provalo tu

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

    println!("Original Prices:");
    // TODO: Usa enumerate() per stampare il numero e il prezzo di ogni articolo
    // Suggerimento: prices.iter().enumerate() restituisce coppie (index, &price)
    // Formatta i prezzi con 2 cifre decimali usando {:.2}; consulta le istruzioni per il formato esatto


    println!("\nBundle Deals:");
    // TODO: Concatena chunks(2) ed enumerate(): prices.chunks(2).enumerate()
    // Questo restituisce coppie (index, chunk); ogni chunk è una slice, quindi chunk.len() ne indica la dimensione
    // Se chunk.len() == 2, stampa: "Bundle 1: $2.75 + $1.50 = $4.25"
    // Se chunk.len() == 1, stampa la riga per il singolo articolo descritta nelle istruzioni
    // Usa {:.2} per formattare tutti i prezzi con 2 cifre decimali


    // TODO: Usa iter_mut() per applicare uno 10% discount a tutti i prezzi
    // Suggerimento: moltiplica ogni *price per 0.9


    println!("\nPrices after 10% discount:");
    // TODO: Stampa ogni prezzo scontato con 2 cifre decimali
    // Il formato dell'output atteso è mostrato nelle istruzioni

}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Compilatore Rust online