Ana içeriğe geç
Modül 7 · Ders 1 ders 2Kurstaki 13/14~12 min
Modül dersleri (1/2)

Koleksiyonlar ve HashMap

Koleksiyonlar birden fazla değeri tutabilen veri yapılarıdır. İlkel dizi ve tuple türlerinden farklı olarak, bu koleksiyonların referans verdiği veriler yığın üzerinde depolanır; bu, veri miktarının derleme zamanında bilinmesine gerek olmadığı ve programın yürütülmesi sırasında dinamik olarak büyüyüp küçülebileceği anlamına gelir.

Rust'ta en sık kullanılan iki koleksiyon vektörler (Vec<T>) ve anahtar-değer eşlemeleridir (HashMap<K, V>).


Vektörler (Vec<T>)

Vektörler, bellekte tüm değerleri yan yana koyan tek bir veri yapısında aynı türden birden fazla değeri saklamanıza olanak tanır:

Rust
fn main() {
    // Creating an empty mutable vector
    let mut v: Vec<i32> = Vec::new();

    // Or using the vec! macro
    let mut v2 = vec![1, 2, 3];

    // Appending elements
    v.push(5);
    v.push(6);

    // Accessing elements by index
    let third = v2[2];
    println!("The third element is: {}", third);
}

HashMap (HashMap<K, V>)

HashMap<K, V> koleksiyonu, K türündeki anahtarların V türündeki değerlerle eşlenmesini saklar. Bu anahtarların ve değerlerin belleğe nasıl yerleştirileceğini belirleyen karma işlevi aracılığıyla çalışır. Verileri sayısal bir dizine göre değil de bir anahtara (ad veya kimlik gibi) göre aramak istediğinizde son derece kullanışlıdır.

Rust
use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();

    // Inserting key-value pair
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);

    // Reading a value (returns an Option<&V>)
    let team_name = String::from("Blue");
    let score = scores.get(&team_name);

    match score {
        Some(val) => println!("Score: {}", val),
        None => println!("No score found."),
    }
}

Kendin dene

Alıştırma 1: Vec'te Temel İşlemler

Egzersiz#rust.m7.l1.e1
Denemeler: 0Yükleniyor…

Vec::new() kullanarak v adında değişken bir tamsayı vektörü bildirin. Push yöntemini kullanarak 10, 20 ve 30 numaralı elemanları sırayla ekleyin. Son olarak vektörün ilk elemanını (indeks 0) println! kullanarak yazdırın.

Düzenleyici yükleniyor…
İpucu göster

Vektörü başlatmak için "let mut v = Vec::new();" kullanın, "v.push(value)" ile öğeleri ekleyin ve "v[0]" ile erişin.

3 denemeden sonra çözüm mevcut

Alıştırma 2: HashMap ile Kullanıcı Puanları

Egzersiz#rust.m7.l1.e2
Denemeler: 0Yükleniyor…

Std::collections::HashMap’i içe aktarın. Ana işlevde, String anahtarlarını ve i32 değerlerini depolamak için puanlar adlı değişken bir HashMap bildirin. 'Alice' kullanıcısı için 50 puan girin. Get yöntemini kullanarak puanı güvenli bir şekilde çıkarın ve yazdırmak için unwrap() yöntemini kullanın.

Düzenleyici yükleniyor…
İpucu göster

'Std::collections::HashMap;' kullanmayı unutmayın. `scores.insert(String::from("Alice"), 50);`ile ekleyin ve`.get("Alice").unwrap()` ile değeri getirin.

3 denemeden sonra çözüm mevcut

Alıştırma 3: Bir Vektördeki Değerleri İkiye Katlama

Egzersiz#rust.m7.l1.e3
Denemeler: 0Yükleniyor…

&[i32] tamsayılarından oluşan bir dilime başvuruyu kabul eden ve aynı öğeleri 2 ile çarpılmış olarak içeren yeni bir Vec<i32> döndüren double_values ​​adlı bir işlev tanımlayın.

Düzenleyici yükleniyor…
İpucu göster

İşlev, dilimin öğeleri üzerinde yinelemeli ve bunları döndürülecek yeni vektöre 2 ile çarparak yerleştirmelidir.

3 denemeden sonra çözüm mevcut