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 usar 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 en partes iguales.

También puedes encadenar .enumerate() después de .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 la compra con artículos y sus precios, y proporcione diferentes vistas de los datos.

El programa debe:

  1. Imprimir cada número de artículo y su precio (usando enumerate). Formatea como Item N: $Price (por ejemplo, Item 1: $2.75).
  2. Imprimir los precios en parejas (usando chunks) como "ofertas de paquetes". 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).

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

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

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
    // Pista: prices.iter().enumerate() da pares (index, &price)
    // Formatea los precios a 2 decimales usando {:.2} — p. ej., "Item 1: $2.75"


    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 dice su tamaño
    // If chunk.len() == 2, print: "Bundle 1: $2.75 + $1.50 = $4.25"
    // Si chunk.len() == 1, imprime: "Bundle 4: $7.90"
    // Usa {:.2} para formatear todos los precios a 2 decimales


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


    println!("\nPrices after 10% discount:");
    // TODO: Imprime cada precio con descuento formateado a 2 decimales
    // Esperado: "$2.48" etc.

}
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