Döngü ve vektör
- Rust kursu
- Başlangıç
- Ders 97/115
- 4 dk
for ile vektör elemanları üzerinde dönersin.
Döngü ve vektör
Vektörü dolaşmanın üç yolu, üç farklı sahiplik anlamına gelir:
let mut v = vec![1, 2, 3];
for x in &v { println!("{x}"); } // &i32: okur
for x in &mut v { *x *= 2; } // &mut i32: değiştirir
for x in v { println!("{x}"); } // i32: tüketir, v artık yokKonuma da ihtiyacın varsa enumerate kullan: for (i, x) in v.iter().enumerate().
Yineleyici yöntemleri
Döngü yerine yineleyici yöntemleri çoğu zaman daha açıktır:
let notlar = vec![70, 85, 90, 45];
let toplam: i32 = notlar.iter().sum();
let gecen: Vec<&i32> = notlar.iter().filter(|&&n| n >= 50).collect();
let artirilmis: Vec<i32> = notlar.iter().map(|n| n + 5).collect();
println!("{toplam} {:?} {:?}", gecen, artirilmis);
// 290 [70, 85, 90] [75, 90, 95, 50]Uygulama Zam ve liste
let mut fiyat = vec![100, 250, 40]; için for f in &mut fiyat ile her fiyata kendisinin onda birini ekle. Sonra enumerate ile 1: 110 biçiminde (sıra 1'den başlasın) her satırı yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn main() {
let mut fiyat = vec![100, 250, 40];
for f in &mut fiyat {
*f += *f / 10;
}
for (i, f) in fiyat.iter().enumerate() {
println!("{}: {}", i + 1, f);
}
}Beklenen çıktı
1: 110 2: 275 3: 44
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Döngü içinde <code>v.push(..)</code> çağırırken <code>for x in &v</code> neden hata verir?
- push döngüde yasak
- x yanlış türde
- Hata vermez
- Döngü v'yi ödünç alırken değiştirilemez Doğru cevap
Açıklama: Büyüyen vektör yeni belleğe taşınabilir ve döngünün referansları geçersiz kalırdı; borrow checker bunu engeller.
2 Konumla dolaş
for (i, x) in v.iter().____() {
println!("{i}: {x}");
}
for (i, x) in v.iter().enumerate() {
println!("{i}: {x}");
}
Açıklama: enumerate her elemanı (indeks, eleman) ikilisi olarak verir.
3 Döngü ve x türü
| Kavram | Anlamı |
|---|---|
for x in &v |
&i32 |
for x in &mut v |
&mut i32 |
for x in v |
i32 (tüketir) |
for (i, x) in v.iter().enumerate() |
(usize, &i32) |