Menu
Coddy logo textTech

Gelişmiş For Döngüsü

Coddy'nin Rust Journey'sinin Fundamentals bölümünün bir parçası — ders 66 / 75.

Bir dizi üzerinde döngü kurmanın (iterate etmenin) farklı yolları vardır, işte bunlardan bazıları:
Aşağıdaki diziyi dikkate alın:

let numbers = [1, 2, 3, 4, 5];
  • Doğrudan İteratör:

    for num in numbers.iter() {}
    // Değerler: 1, 2, 3, 4, 5
  • İndeks & Değer:

    for (index, value) in numbers.iter().enumerate() { }
    // Değerler: (0,1), (1,2), (2,3), (3,4), (4,5)
  • Belirli boyuttaki dilimler:

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

    Her bir chunk bir slice'tır, bu nedenle üzerinde dilim metotlarını kullanabilirsiniz — örneğin, chunk.len() o chunk içinde kaç eleman olduğunu döndürür. Dizi eşit şekilde bölünmezse son chunk daha küçük olabilir.

Hem bir indeks hem de dilimi aynı anda elde etmek için .chunks() metoduna .enumerate() metodunu da zincirleyebilirsiniz:

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

Burada, .chunks(2) önce dilimleri üretir, ardından .enumerate() her birini bir sayaç ile sarmalar — böylece i dilim indeksi, chunk ise dilim olur.

  • Mutasyon ile yineleyin:

    for num in numbers.iter_mut() { 
    	*num *= 2;
    }
    // Dizi şu hale gelir: [2, 4, 6, 8, 10]
challenge icon

Görev

Kolay

Ürünler ve fiyatlarını içeren bir alışveriş listesini işleyen ve verilerin farklı görünümlerini sağlayan bir program oluşturun.

Program şunları yapmalıdır:

  1. Her ögenin numarasını ve fiyatını yazdırın (enumerate kullanarak). Item N: $Price şeklinde biçimlendirin (ör. Item 1: $2.75).
  2. Fiyatları ikili gruplar halinde (chunks kullanarak) "paket fırsatları" (bundle deals) olarak yazdırın. Bir pakette 2 ürün varsa toplamı yazdırın: Bundle N: $Price1 + $Price2 = $Sum. Yalnızca 1 ürün varsa şunu yazdırın: Bundle N: $Price.
  3. Tüm fiyatlara %10 indirim uygulayın (iter_mut kullanarak).
  4. İndirimli son fiyatları, her biri yeni bir satırda ve 2 ondalık basamağa göre biçimlendirilmiş olarak yazdırın (ör. $2.48).

Hint: İteratörleri birbirine zincirleyebilirsiniz — örneğin, prices.chunks(2).enumerate() size hem chunk indeksini hem de chunk dilimini aynı anda verir. Her bir chunk bir dilimdir, bu nedenle üzerinde chunk.len() çağırabilir ve chunk[0], chunk[1], etc. şeklinde indeksleme yapabilirsiniz.

Expected output format for prices:
Fiyatları 2 ondalık basamağa göre biçimlendirmek için ${:.2} kullanın.

Kendin dene

fn main() {
    let mut prices = [2.75, 1.50, 5.00, 3.5, 4.1, 2.25, 7.9];

    println!("Original Prices:");
    // TODO: Her öğe numarasını ve fiyatı yazdırmak için enumerate() kullan
    // Hint: prices.iter().enumerate() (index, &price) çiftleri verir
    // Fiyatları {:.2} kullanarak 2 ondalık basamağa biçimlendir — örn., "Item 1: $2.75"


    println!("\nBundle Deals:");
    // TODO: chunks(2) ve enumerate()'i birlikte zincirle: prices.chunks(2).enumerate()
    // Bu (index, chunk) çiftleri verir — her chunk bir dilimdir, bu yüzden chunk.len() boyutunu söyler
    // If chunk.len() == 2, print: "Bundle 1: $2.75 + $1.50 = $4.25"
    // Eğer chunk.len() == 1 ise, yazdır: "Bundle 4: $7.90"
    // Tüm fiyatları 2 ondalık basamağa biçimlendirmek için {:.2} kullan


    // TODO: Tüm fiyatlara %10 indirim uygulamak için iter_mut() kullan
    // Hint: her *price değerini 0.9 ile çarp


    println!("\nPrices after 10% discount:");
    // TODO: Her indirimli fiyatı 2 ondalık basamağa biçimlendirilmiş olarak yazdır
    // Beklenen: "$2.48" vb.

}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Fundamentals bölümündeki tüm dersler