Pular para o conteúdo principal
Módulo 7 · Lição 1 de 213/14 no curso~12 min
Lições do módulo (1/2)

Coleções e HashMap

Coleções são estruturas de dados capazes de conter vários valores. Ao contrário dos tipos primitivos de array e tupla, os dados referenciados por essas coleções são armazenados no heap, o que significa que a quantidade de dados não precisa ser conhecida em tempo de compilação e pode aumentar ou diminuir dinamicamente durante a execução do programa.

As duas coleções mais comumente usadas em Rust são vetores (Vec<T>) e mapas de valores-chave (HashMap<K, V>).


Vetores (Vec<T>)

Os vetores permitem armazenar mais de um valor do mesmo tipo em uma única estrutura de dados que coloca todos os valores próximos uns dos outros na memória:

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

A coleção HashMap<K, V> armazena um mapeamento de chaves do tipo K para valores do tipo V. Ele opera por meio de uma função hashing, que determina como essas chaves e valores são colocados na memória. É extremamente útil quando você deseja pesquisar dados não por um índice numérico, mas por uma chave (como um nome ou 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."),
    }
}

Experimente você mesmo

Exercício 1: Operações Básicas em Vec

Exercício#rust.m7.l1.e1
Tentativas: 0Carregando…

Declare um vetor inteiro mutável chamado v usando Vec::new(). Adicione os elementos 10, 20 e 30 em sequência usando o método push. Por fim, imprima o primeiro elemento do vetor (índice 0) usando println!.

Carregando editor…
Mostrar dica

Use `let mut v = Vec::new();` para inicializar o vetor, insira elementos com `v.push(value)` e acesse com `v[0]`.

Solução disponível após 3 tentativas

Exercício 2: Pontuações do usuário com HashMap

Exercício#rust.m7.l1.e2
Tentativas: 0Carregando…

Importe std::collections::HashMap. Na função principal, declare um HashMap mutável chamado pontuações para armazenar chaves String e valores i32. Insira uma pontuação de 50 para o usuário 'Alice'. Extraia a pontuação com segurança usando o método get e unwrap() para imprimi-la.

Carregando editor…
Mostrar dica

Não se esqueça de `use std::collections::HashMap;`. Insira com `scores.insert(String::from("Alice"), 50);`e busque o valor com`.get("Alice").unwrap()`.

Solução disponível após 3 tentativas

Exercício 3: Duplicando valores em um vetor

Exercício#rust.m7.l1.e3
Tentativas: 0Carregando…

Defina uma função chamada double_values ​​que aceita uma referência a uma fatia de inteiros &[i32] e retorna um novo Vec<i32> contendo os mesmos elementos multiplicados por 2.

Carregando editor…
Mostrar dica

A função deve iterar sobre os elementos da fatia e inseri-los multiplicados por 2 no novo vetor a ser retornado.

Solução disponível após 3 tentativas