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]
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:
- Her ögenin numarasını ve fiyatını yazdırın (
enumeratekullanarak).Item N: $Priceşeklinde biçimlendirin (ör.Item 1: $2.75). - Fiyatları ikili gruplar halinde (
chunkskullanarak) "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. - Tüm fiyatlara %10 indirim uygulayın (
iter_mutkullanarak). - İ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.
}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
4Operatörler Bölüm 1
Aritmetik OperatörlerModül OperatörüAritmetik KısayollarKarşılaştırma OperatörleriString Karşılaştırma7Temel Girdi-Çıktı
Konsola YazdırmaKullanıcı Girdisi OkumaÖzet - 120'ye KadarÖzet - Doğru veya Yanlış5Operatörler Bölüm 2
Mantıksal Operatörler Bölüm 1Mantıksal Operatörler Bölüm 2Özet - Basit MantıkMantıksal Operatörler Bölüm 311Fonksiyonlar
Fonksiyon TanımlamaParametreler ve ArgümanlarDönüş DeğerleriBirden Fazla Dönüş DeğeriÖzet - Sigma FonksiyonuÖzet - Doğrulama Fonksiyonu14Diziler Üzerinde Gezinme
Range RehberiGelişmiş For DöngüsüDöngü İçinde Ödünç AlmaYaygın Dizi İşlemleri3Değişkenler Bölüm 2
Tür Bildirimiİsimlendirme KurallarıTür ÇıkarımıÖzet - Değişkenleri BaşlatmaTür Dönüştürme9Döngüler
Seriler Üzerinde ForWhile DöngüsüBreakContinueİç İçe DöngülerDöngü EtiketleriSonsuz DöngüÖzet - Dinamik Girdi