Direct naar de hoofdinhoud
Module 7 · Les 1 van 213/14 in de cursus~12 min
Modulelessen (1/2)

Collecties en HashMap

Verzamelingen zijn datastructuren die meerdere waarden kunnen bevatten. In tegenstelling tot de primitieve array- en tuple-typen worden de gegevens waarnaar deze verzamelingen verwijzen opgeslagen op de heap, wat betekent dat de hoeveelheid gegevens niet bekend hoeft te zijn tijdens het compileren en tijdens de uitvoering van het programma dynamisch kan groeien of krimpen.

De twee meest gebruikte verzamelingen in Rust zijn vectoren (Vec<T>) en sleutelwaardekaarten (HashMap<K, V>).


Vectoren (Vec<T>)

Met vectoren kunt u meer dan één waarde van hetzelfde type opslaan in een enkele gegevensstructuur die alle waarden naast elkaar in het geheugen plaatst:

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

De verzameling HashMap<K, V> slaat een toewijzing op van sleutels van het type K aan waarden van het type V. Het werkt via een hashfunctie, die bepaalt hoe deze sleutels en waarden in het geheugen worden geplaatst. Dit is uiterst handig als u gegevens niet wilt opzoeken via een numerieke index, maar via een sleutel (zoals een naam of een 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."),
    }
}

Probeer het zelf

Oefening 1: Basisbewerkingen op Vec

Oefening#rust.m7.l1.e1
Pogingen: 0Laden…

Declareer een veranderlijke gehele vector met de naam v met behulp van Vec::new(). Voeg de elementen 10, 20 en 30 achtereenvolgens toe met behulp van de push-methode. Druk ten slotte het eerste element van de vector (index 0) af met println!.

Editor laden…
Toon hint

Gebruik `let mut v = Vec::new();` om de vector te initialiseren, voeg elementen in met `v.push(value)` en open deze met `v[0]`.

Oplossing beschikbaar na 3 pogingen

Oefening 2: Gebruikersscores met HashMap

Oefening#rust.m7.l1.e2
Pogingen: 0Laden…

Importeer std::collections::HashMap. Declareer in de hoofdfunctie een veranderlijke HashMap met de naam scores om String-sleutels en i32-waarden op te slaan. Voer een score van 50 in voor de gebruiker 'Alice'. Extraheer de partituur veilig met behulp van de get-methode en unwrap() om deze af te drukken.

Editor laden…
Toon hint

Vergeet `use std::collections::HashMap;`niet. Voeg in met`scores.insert(String::from("Alice"), 50);`en haal de waarde op met`.get("Alice").unwrap()`.

Oplossing beschikbaar na 3 pogingen

Oefening 3: Waarden verdubbelen in een vector

Oefening#rust.m7.l1.e3
Pogingen: 0Laden…

Definieer een functie met de naam double_values ​​die een verwijzing naar een segment van gehele getallen &[i32] accepteert en een nieuwe Vec<i32> retourneert die dezelfde elementen bevat, vermenigvuldigd met 2.

Editor laden…
Toon hint

De functie moet de elementen van het segment herhalen en deze, vermenigvuldigd met 2, invoegen in de nieuwe vector die moet worden geretourneerd.

Oplossing beschikbaar na 3 pogingen