Gelişmiş For Döngüsü
Coddy'nin Rust Journey'sinin Temeller 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 göz önünde bulundurun:
let numbers = [1, 2, 3, 4, 5];Doğrudan Iterator:
for num in numbers.iter() {} // Değerler: 1, 2, 3, 4, 5
Index & 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 dilim bir slice'tır; bu nedenle üzerinde slice yöntemlerini kullanabilirsiniz. Örneğin,
chunk.len()bu dilimde kaç öğe olduğunu döndürür. Dizi eşit olarak bölünemiyorsa son dilim daha küçük olabilir.
Aynı anda hem bir indeks hem de parçayı elde etmek için .chunks() üzerine .enumerate() zincirini de ekleyebilirsin:
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çla sarar; böylece i parça indeksi, chunk ise dilim olur.
Değişiklik yaparak 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ı içeren bir alışveriş listesini işleyen ve verilerin farklı görünümlerini sunan bir program oluşturun.
Program şunları yapmalıdır:
- Her ürün numarasını ve fiyatını yazdırın (
enumeratekullanarak).Item N: $Pricebiçiminde biçimlendirin (örneğin,Item 1: $2.75). - Fiyatları "paket fırsatları" olarak çiftler halinde yazdırın (
chunkskullanarak). 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). - İndirim uygulanmış son fiyatları, her biri yeni bir satırda olacak şekilde 2 ondalık basamakla biçimlendirerek yazdırın (örneğin,
$2.48).
İpucu: Yineleyicileri birbirine zincirleyebilirsiniz; örneğin prices.chunks(2).enumerate() size hem parça dizinini hem de parça dilimini aynı anda verir. Her chunk bir dilimdir; bu nedenle üzerinde chunk.len() çağrısını yapabilir ve chunk[0], chunk[1] vb. ile dizinleyebilirsiniz.
Fiyatlar için beklenen çıktı biçimi:
Fiyatları 2 ondalık basamağa biçimlendirmek için ${:.2} kullanın.
Tam metin şudur: 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, kesin 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: Use iter_mut() to apply a 10% discount to all prices
// 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.
Temeller 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