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 yineleme yapmanın farklı yolları vardır, işte bunlardan bazıları:
Aşağıdaki diziyi inceleyelim:

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 `chunk` bir slice (dilim) olduğundan, üzerinde dilim metotlarını kullanabilirsiniz — örneğin, chunk.len() bu `chunk` içinde kaç eleman olduğunu döndürür. Dizi eşit şekilde bölünmüyorsa son `chunk` daha küçük olabilir.

Aynı anda hem indeksi hem de dilimi (chunk) elde etmek için .chunks() üzerine .enumerate() 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 index) ve chunk ise dilim (slice) olur.

  • Mutasyon ile yineleme yapın:

    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 ürün numarasını ve fiyatını yazdırın (enumerate kullanarak). Item N: $Price şeklinde biçimlendirin (ör. Item 1: $2.75).
  2. Fiyatları çiftler halinde (chunks kullanarak) "paket fırsatları" 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 olacak şekilde 2 ondalık basamakla biçimlendirerek yazdırın (ör. $2.48).

İpucu: İteratörleri birbirine bağlayabilirsiniz — örneğin, prices.chunks(2).enumerate() size hem paket indeksini hem de paket dilimini aynı anda verir. Her chunk bir dilimdir, bu nedenle üzerinde chunk.len() çağırabilir ve chunk[0], chunk[1] vb. ile indeksleyebilirsiniz.

Fiyatlar için beklenen çıktı biçimi:
Fiyatları 2 ondalık basamağa biçimlendirmek için ${:.2} kullanın.

Tam metin şu şekildedir: Bundle 4: $7.90.

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 ürün 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, tam biçim için talimatlara bak


    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, talimatlarda açıklanan tek öğe satırını yazdır
    // 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 çıktı biçimi talimatlarda gösterilmiştir

}
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

Kendi başına pratik yap: Online Rust derleyicisi