Lompati ke konten utama
Modul 7 · Pelajaran 1 dari 213/14 dalam kursus~12 min
Pelajaran modul (1/2)

Koleksi dan HashMap

Koleksi adalah struktur data yang mampu menyimpan banyak nilai. Berbeda dengan tipe array dan tuple primitif, data yang direferensikan oleh koleksi ini disimpan di heap, yang berarti jumlah data tidak perlu diketahui pada waktu kompilasi dan dapat bertambah atau menyusut secara dinamis selama eksekusi program.

Dua koleksi yang paling umum digunakan di Rust adalah vektor (Vec<T>) dan peta nilai kunci (HashMap<K, V>).


Vektor (Vec<T>)

Vektor memungkinkan Anda menyimpan lebih dari satu nilai bertipe sama dalam satu struktur data yang menempatkan semua nilai bersebelahan dalam memori:

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);
}

Peta Hash (HashMap<K, V>)

Koleksi HashMap<K, V> menyimpan pemetaan kunci bertipe K ke nilai bertipe V. Ini beroperasi melalui fungsi hashing, yang menentukan bagaimana kunci dan nilai ini ditempatkan di memori. Ini sangat berguna ketika Anda ingin mencari data bukan berdasarkan indeks numerik, namun berdasarkan kunci (seperti nama atau ID).

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."),
    }
}

Cobalah sendiri

Latihan 1: Operasi Dasar pada Vec

Latihan#rust.m7.l1.e1
Upaya: 0Memuat…

Deklarasikan vektor bilangan bulat yang dapat diubah bernama v menggunakan Vec::new(). Tambahkan elemen 10, 20, dan 30 secara berurutan menggunakan metode push. Terakhir, cetak elemen pertama dari vektor (indeks 0) menggunakan println!.

Memuat editor…
Tunjukkan petunjuk

Gunakan `let mut v = Vec::new();` untuk menginisialisasi vektor, masukkan elemen dengan `v.push(value)` dan akses dengan `v[0]`.

Solusi tersedia setelah 3 upaya

Latihan 2: Skor Pengguna dengan HashMap

Latihan#rust.m7.l1.e2
Upaya: 0Memuat…

Impor std::koleksi::HashMap. Dalam fungsi utama, deklarasikan skor bernama HashMap yang dapat diubah untuk menyimpan kunci String dan nilai i32. Masukkan skor 50 untuk pengguna 'Alice'. Ekstrak skor dengan aman menggunakan metode get dan unwrap() untuk mencetaknya.

Memuat editor…
Tunjukkan petunjuk

Jangan lupa `gunakan std::collections::HashMap;`. Sisipkan dengan `scores.insert(String::from("Alice"), 50);`dan ambil nilainya dengan`.get("Alice").unwrap()`.

Solusi tersedia setelah 3 upaya

Latihan 3: Menggandakan Nilai dalam Vektor

Latihan#rust.m7.l1.e3
Upaya: 0Memuat…

Definisikan fungsi bernama double_values ​​yang menerima referensi ke potongan bilangan bulat &[i32] dan mengembalikan Vec<i32> baru yang berisi elemen yang sama dikalikan 2.

Memuat editor…
Tunjukkan petunjuk

Fungsi tersebut harus mengulangi elemen irisan dan memasukkannya dikalikan 2 ke dalam vektor baru untuk dikembalikan.

Solusi tersedia setelah 3 upaya