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 e valore:
for (index, value) in numbers.iter().enumerate() { } // Valori: (0,1), (1,2), (2,3), (3,4), (4,5)
Porzioni di dimensioni specifiche:
for chunk in numbers.chunks(2) { } // Valori: [1,2], [3,4], [5]Ogni porzione è una slice, quindi puoi usarne i metodi, per esempio
chunk.len()restituisce il numero di elementi presenti in quella porzione. L'ultima porzione può essere più piccola se l'array non è divisibile esattamente.
Puoi anche concatenare .enumerate() a .chunks() per ottenere contemporaneamente un indice e il blocco:
for (i, chunk) in numbers.chunks(2).enumerate() { }
// Valori: (0,[1,2]), (1,[3,4]), (2,[5])Qui, .chunks(2) genera prima le slice, poi .enumerate() associa a ciascuna un contatore, quindi i è l'indice del blocco e chunk è la slice.
Itera con mutazione:
let mut numbers = [1, 2, 3, 4, 5]; for num in numbers.iter_mut() { *num *= 2; } // L'array diventa: [2, 4, 6, 8, 10]
Sfida
FacileCrea un programma che elabori una lista della spesa con articoli e relativi prezzi e mostri i dati in modi diversi.
Il programma dovrebbe:
- Stampare il numero e il prezzo di ogni articolo (usando
enumerate). Formatta comeItem N: $Price(ad es.,Item 1: $2.75). - Stampare i prezzi a coppie (usando
chunks) come "offerte bundle". Se un bundle contiene 2 articoli, stampa la somma:Bundle N: $Price1 + $Price2 = $Sum. Se contiene solo 1 articolo, stampa:Bundle N: $Price. - Applicare uno sconto del 10% a tutti i prezzi (usando
iter_mut). - Stampare i prezzi scontati finali, ciascuno su una nuova riga, formattati con 2 cifre decimali (ad es.,
$2.48).
Suggerimento: Puoi concatenare gli iteratori, ad esempio prices.chunks(2).enumerate() ti fornisce contemporaneamente sia l’indice del blocco sia la slice del blocco. Ogni chunk è una slice, quindi puoi chiamare chunk.len() e accedervi tramite indice con chunk[0], chunk[1] e così via.
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 sconto del 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 previsto è mostrato nelle istruzioni
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
4Operatori Parte 1
Operatori aritmeticiOperatore moduloAbbreviazioni aritmeticheOperatori di confrontoConfronto tra stringhe7Input/output di base
Stampare sulla consoleLeggere l'input dell'utenteRiepilogo - Fino a 120Riepilogo - Vero o falso5Operatori Parte 2
Operatori logici Parte 1Operatori logici Parte 2Ripasso - Logica sempliceOperatori logici Parte 311Funzioni
Dichiarare le funzioniParametri e argomentiValori restituitiValori restituiti multipliRiepilogo - funzione SigmaRiepilogo - funzione di validazione14Iterare sugli array
Guida ai rangeCiclo for avanzatoPrestito nel cicloOperazioni comuni sugli array3Variabili Parte 2
Dichiarazione del tipoConvenzioni di denominazioneInferenza del tipoRipasso - Inizializzare le variabiliConversione di tipo9Cicli
Ciclo for su sequenzeCiclo whileBreakContinueCiclo annidatoEtichette dei cicliCiclo infinitoRiepilogo - Input dinamico12Fondamenti degli array
Dichiarare gli arrayArray come parametroAccedere agli elementiModificare gli arrayRiepilogo - Stampare un array in modo leggibile15Operazioni sulle stringhe
Metodi delle stringheMacro format!Conversione delle stringheRipasso - FormattazioneEsercitati da solo: Compilatore Rust online