CodeBlanks Logo Icon CodeBlanks

Index ve get

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

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
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

Soru
let v = vec![10, 20, 30];
let c = v.____(5);   // None
Cevap
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

Başlangıç bölümündeki tüm dersler

16 Proje: Yapılacaklar listesi

  1. Görev modeli
  2. Ekleme
  3. Listeleme
  4. İşaretleme
  5. Komut okuma