Loop For Aprimorado
Parte da seção Fundamentos do Journey de Rust da Coddy. Lição 66 de 75.
Há diferentes maneiras de iterar sobre um array; aqui estão algumas delas:
Considere o seguinte array:
let numbers = [1, 2, 3, 4, 5];Iterador direto:
for num in numbers.iter() {} // Valores: 1, 2, 3, 4, 5
Índice e valor:
for (index, value) in numbers.iter().enumerate() { } // Valores: (0,1), (1,2), (2,3), (3,4), (4,5)
Fatias de tamanho específico:
for chunk in numbers.chunks(2) { } // Valores: [1,2], [3,4], [5]Cada fragmento é uma fatia, então você pode usar métodos de fatia nele; por exemplo,
chunk.len()retorna quantos elementos há nesse fragmento. O último fragmento pode ser menor se o array não for divisível igualmente.
Você também pode encadear .enumerate() a .chunks() para obter um índice e o bloco ao mesmo tempo:
for (i, chunk) in numbers.chunks(2).enumerate() { }
// Valores: (0,[1,2]), (1,[3,4]), (2,[5])Aqui, .chunks(2) produz primeiro as fatias, depois .enumerate() envolve cada uma com um contador, então i é o índice do bloco e chunk é a fatia.
Itere com mutação:
for num in numbers.iter_mut() { *num *= 2; } // Array se torna: [2, 4, 6, 8, 10]
Desafio
FácilCrie um programa que processe uma lista de compras com itens e seus preços, e forneça diferentes visualizações dos dados.
O programa deve:
- Imprimir o número e o preço de cada item (usando
enumerate). Formate comoItem N: $Price(por exemplo,Item 1: $2.75). - Imprimir os preços em pares (usando
chunks) como “ofertas de combos”. Se um combo tiver 2 itens, imprima a soma:Bundle N: $Price1 + $Price2 = $Sum. Se tiver apenas 1 item, imprima:Bundle N: $Price. - Aplique um desconto de 10% a todos os preços (usando
iter_mut). - Imprima os preços finais com desconto, cada um em uma nova linha, formatados com 2 casas decimais (por exemplo,
$2.48).
Dica: Você pode encadear iteradores, por exemplo, prices.chunks(2).enumerate() fornece o índice do bloco e a fatia do bloco ao mesmo tempo. Cada chunk é uma fatia, então você pode chamar chunk.len() nela e acessar seus índices com chunk[0], chunk[1], etc.
Formato de saída esperado para os preços:
Use ${:.2} para formatar os preços com 2 casas decimais.
O texto exato é Bundle 4: $7.90.
Experimente você mesmo
fn main() {
let mut prices = [2.75, 1.50, 5.00, 3.5, 4.1, 2.25, 7.9];
println!("Original Prices:");
// TODO: Use enumerate() para imprimir o número e o preço de cada item
// Dica: prices.iter().enumerate() fornece pares (index, &price)
// Formate os preços com 2 casas decimais usando {:.2}, veja as instruções para o formato exato
println!("\nBundle Deals:");
// TODO: Encadeie chunks(2) e enumerate() juntos: prices.chunks(2).enumerate()
// Isso fornece pares (index, chunk), cada chunk é um slice, então chunk.len() indica o seu tamanho
// If chunk.len() == 2, print: "Bundle 1: $2.75 + $1.50 = $4.25"
// Se chunk.len() == 1, imprima a linha do item único descrita nas instruções
// Use {:.2} para formatar todos os preços com 2 casas decimais
// TODO: Use iter_mut() to apply a 10% discount to all prices
// Dica: multiplique cada *price por 0.9
println!("\nPrices after 10% discount:");
// TODO: Imprima cada preço com desconto formatado com 2 casas decimais
// O formato de saída esperado é mostrado nas instruções
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
4Operadores Parte 1
Operadores AritméticosOperador de MóduloAtalhos AritméticosOperadores de ComparaçãoComparação de Strings7Entrada e Saída Básica
Exibindo no ConsoleLendo a Entrada do UsuárioRevisão - Até 120Revisão - Verdadeiro ou Falso5Operadores Parte 2
Operadores Lógicos Parte 1Operadores Lógicos Parte 2Recapitulação - Lógica SimplesOperadores Lógicos Parte 33Variáveis Parte 2
Declaração de TipoConvenções de NomenclaturaInferência de TipoRecapitulação - Inicializar VariáveisConversão de Tipo9Laços
For sobre SériesLaço WhileBreakContinueLaços AninhadosRótulos de LoopLoop InfinitoRecapitulação - Entrada DinâmicaPratique por conta própria: Compilador de Rust online