Menu
Coddy logo textTech

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