Index ve get
- Rust kursu
- Başlangıç
- Ders 96/115
- 4 dk
Index ve get ile vektör elemanlarına güvenli erişirsin.
İndeks ve get
Elemana iki yolla erişilir. v[i] doğrudan değeri verir ama sınır dışında panic verir. v.get(i) ise Option<&T> döndürür:
let v = vec![10, 20, 30];
let a = v[1]; // 20
let b = v.get(2); // Some(&30)
let c = v.get(5); // None
// let d = v[5]; // panic: index out of boundsİndeksin geçerli olduğundan eminsen [], kullanıcıdan gelen bir indeks gibi belirsiz durumlarda get kullan.
İlk, son ve arama
Sık kullanılan okuma yöntemleri de Option döndürür:
let v = vec![4, 8, 15];
println!("{:?} {:?}", v.first(), v.last()); // Some(4) Some(15)
println!("{}", v.contains(&8)); // true
println!("{:?}", v.iter().position(|&x| x == 15)); // Some(2)get_mut(i) ise değiştirilebilir referans verir: if let Some(x) = v.get_mut(0) { *x += 1; }.
Uygulama Erişim yolları
let v = vec![10, 20, 30]; için v[1], v.get(2) ve v.get(5) sonuçlarını tek satırda yazdır (Option'lar için {:?}).
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn main() {
let v = vec![10, 20, 30];
println!("{} {:?} {:?}", v[1], v.get(2), v.get(5));
}Beklenen çıktı
20 Some(30) None
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>let v = vec![String::from("a")]; let s = v[0];</code> neden derlenmez?
- v[0] String'i vektörden taşımaya çalışır; &v[0] ya da clone gerekir Doğru cevap
- İndeks 0 geçersiz
- String indekslenemez
- Derlenir
Açıklama: Copy olmayan bir elemanı indeksle dışarı taşımak yasaktır (E0507). Referans al ya da kopyala.
2 Güvenli erişim
let v = vec![10, 20, 30];
let c = v.____(5); // None
let v = vec![10, 20, 30];
let c = v.get(5); // None
Açıklama: get sınır dışında panic yerine None döndürür.
3 İfade ve sonuç (v = [10, 20, 30])
| Kavram | Anlamı |
|---|---|
v[1] |
20 |
v.get(2) |
Some(30) |
v.get(5) |
None |
v[5] |
Panic |