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]
Sfida
FacileCrea un programma che elabori una lista della spesa con articoli e relativi prezzi e fornisca diverse visualizzazioni dei dati.
Il programma dovrebbe:
- Stampare il numero e il prezzo di ogni articolo (usando
enumerate). Formatta comeItem N: $Price(ad esempio,Item 1: $2.75). - 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. - Applicare uno sconto del 10% a tutti i prezzi (usando
iter_mut). - 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
}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