Menu
Coddy logo textTech

Removendo um Par

Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 33 de 66.

Às vezes, você precisa remover dados do seu hash map inteiramente. O Rust fornece o método .remove() para excluir um par chave-valor especificando a chave:

let mut inventory = HashMap::new();
inventory.insert("apples", 50);
inventory.insert("bananas", 30);

// Remove a entrada "apples" completamente
inventory.remove("apples");

O método .remove() recebe a chave como um parâmetro e remove tanto a chave quanto seu valor associado do hash map. Após chamar .remove("apples"), tentar buscar por "apples" retornaria None.

Como muitas operações de hash map, .remove() retorna um Option. Ele retorna Some(value) contendo o valor removido se a chave existia, ou None se a chave não foi encontrada:

let removed_value = inventory.remove("bananas");
match removed_value {
    Some(count) => println!("Removed {} bananas", count),
    None => println!("No bananas found to remove"),
}

Este valor de retorno permite que você saiba se a remoção foi bem-sucedida e fornece acesso ao valor que foi removido, o que pode ser útil para operações de log ou limpeza.

challenge icon

Desafio

Fácil

Você receberá um número inteiro n indicando a quantidade de itens em um inventário. Em seguida, você receberá n pares de entradas: o nome de um item seguido por sua quantidade (como um número inteiro). Depois disso, você receberá mais uma entrada com o nome de um item para remover do inventário. Crie um hash map para armazenar o inventário, insira todos os itens, remova o item especificado e imprima o resultado da remoção junto com o inventário restante.

Requisitos:

  • Importe HashMap de std::collections
  • Crie um hash map mutável com os tipos HashMap<String, i32>
  • Leia a primeira entrada e converta-a para i32 para obter o número de itens
  • Use um loop para ler n pares de entradas (nome do item, depois a quantidade)
  • Insira cada item e sua quantidade no hash map
  • Leia mais uma entrada como o nome do item a ser removido
  • Use .remove() para remover o item do hash map
  • Use match para tratar o Option retornado por .remove()
  • Se o item foi encontrado e removido, imprima: Removed [quantity] [item_name]
  • Se o item não foi encontrado, imprima: [item_name] not found
  • Após tratar a remoção, itere sobre o hash map restante e imprima cada item no formato: [item_name]: [quantity]

Entrada:

  • Primeira linha: Um número inteiro n (ex: 3)
  • Próximos n pares de linhas:
    • Nome do item (ex: apples)
    • Quantidade como um número inteiro (ex: 50)
  • Última linha: Nome do item para remover (ex: bananas)

Saída:

  • Primeira linha: Ou Removed [quantity] [item_name] ou [item_name] not found
  • Linhas seguintes: Uma linha para cada item restante no formato: [item_name]: [quantity]
  • A ordem dos itens restantes pode variar entre as execuções de teste

Folha de consulta

Para remover um par chave-valor de um hash map, use o método .remove() com a chave como parâmetro:

let mut inventory = HashMap::new();
inventory.insert("apples", 50);
inventory.insert("bananas", 30);

inventory.remove("apples");

O método .remove() retorna um Option: Some(value) se a chave existia, ou None se ela não foi encontrada:

let removed_value = inventory.remove("bananas");
match removed_value {
    Some(count) => println!("Removed {} bananas", count),
    None => println!("No bananas found to remove"),
}

Experimente você mesmo

use std::collections::HashMap;
use std::io::{self, BufRead};

fn main() {
    let stdin = io::stdin();
    let mut lines = stdin.lock().lines();
    
    // Lê o número de itens
    let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
    
    // Cria um hash map mutável para armazenar o inventário
    let mut inventory: HashMap<String, i32> = HashMap::new();
    
    // Lê n pares de entradas (nome do item e quantidade)
    for _ in 0..n {
        let item_name = lines.next().unwrap().unwrap().trim().to_string();
        let quantity: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
        
        // TODO: Insere o item e a quantidade no hash map
    }
    
    // Lê o nome do item a ser removido
    let item_to_remove = lines.next().unwrap().unwrap().trim().to_string();
    
    // TODO: Remove o item do hash map e trata o resultado usando match
    // Imprime o resultado da remoção (ou "Removed [quantity] [item_name]" ou "[item_name] not found")
    
    // TODO: Itera sobre o inventário restante e imprime cada item no formato "[item_name]: [quantity]"
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Logic & Flow