Menu
Coddy logo textTech

Bucle for mejorado

Parte de la sección Fundamentals del Journey de Rust de Coddy. Lección 66 de 75.

Hay diferentes formas de iterar sobre un array, aquí tienes algunas de ellas:
Considera el siguiente array:

let numbers = [1, 2, 3, 4, 5];
  • Iterador directo:

    for num in numbers.iter() {}
    // Valores: 1, 2, 3, 4, 5
  • Índice y valor:

    for (index, value) in numbers.iter().enumerate() { }
    // Valores: (0,1), (1,2), (2,3), (3,4), (4,5)
  • Slices de un tamaño específico:

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

    Cada chunk es un slice, por lo que puedes utilizar métodos de slice en él — por ejemplo, chunk.len() devuelve cuántos elementos hay en ese chunk. El último chunk puede ser más pequeño si el array no se divide equitativamente.

También puedes encadenar .enumerate() sobre .chunks() para obtener tanto un índice como el fragmento al mismo tiempo:

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

Aquí, .chunks(2) produce los slices primero, después .enumerate() envuelve cada uno con un contador — por lo que i es el índice del fragmento y chunk es el slice.

  • Iterar con mutación:

    for num in numbers.iter_mut() { 
    	*num *= 2;
    }
    // El array se convierte en: [2, 4, 6, 8, 10]
challenge icon

Desafío

Fácil

Crea un programa que procese una lista de compras con artículos y sus precios, y proporcione diferentes vistas de los datos.

El programa debe:

  1. Imprimir el número de cada artículo y su precio (usando enumerate). Formatea como Item N: $Price (por ejemplo, Item 1: $2.75).
  2. Imprimir los precios en pares (usando chunks) como "ofertas en paquete" ("bundle deals"). Si un paquete tiene 2 artículos, imprime la suma: Bundle N: $Price1 + $Price2 = $Sum. Si solo tiene 1 artículo, imprime: Bundle N: $Price.
  3. Aplicar un 10% de descuento a todos los precios (usando iter_mut).
  4. Imprimir los precios finales con descuento, cada uno en una nueva línea, formateados a 2 decimales (por ejemplo, $2.48).

Pista: Puedes encadenar iteradores — por ejemplo, prices.chunks(2).enumerate() te da tanto el índice del fragmento como la rebanada (slice) del fragmento a la vez. Cada chunk es un slice, por lo que puedes llamar a chunk.len() en él e indexar en él con chunk[0], chunk[1], etc.

Formato de salida esperado para los precios:
Usa ${:.2} para formatear los precios a 2 decimales.

El texto exacto es Bundle 4: $7.90.

Pruébalo tú mismo

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() para imprimir el número de cada ítem y el precio
    // Hint: prices.iter().enumerate() da pares (index, &price)
    // Formatea los precios a 2 decimales usando {:.2}, consulta las instrucciones para el formato exacto


    println!("\nBundle Deals:");
    // TODO: Encadena chunks(2) y enumerate() juntos: prices.chunks(2).enumerate()
    // Esto da pares (index, chunk), cada chunk es un slice, así que chunk.len() te indica su tamaño
    // If chunk.len() == 2, print: "Bundle 1: $2.75 + $1.50 = $4.25"
    // Si chunk.len() == 1, imprime la línea del ítem único descrita en las instrucciones
    // Usa {:.2} para formatear todos los precios a 2 decimales


    // TODO: Usa iter_mut() para aplicar un descuento del 10% a todos los precios
    // Hint: multiplica cada *price por 0.9


    println!("\nPrices after 10% discount:");
    // TODO: Imprime cada precio con descuento formateado a 2 decimales
    // El formato de salida esperado se muestra en las instrucciones

}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentals

Practica por tu cuenta: Compilador de Rust online