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]
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 ürün numarasını ve fiyatını yazdırın (
enumeratekullanarak).Item N: $Priceşeklinde biçimlendirin (ör.Item 1: $2.75). - Fiyatları çiftler halinde (
chunkskullanarak) "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. - Tüm fiyatlara %10 indirim uygulayın (
iter_mutkullanarak). - İ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
}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 GirdiKendi başına pratik yap: Online Rust derleyicisi