Menu
Coddy logo textTech

Inserindo Pares Chave-Valor

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

Agora que você tem um hash map vazio, é hora de adicionar alguns dados a ele. Você pode inserir pares chave-valor em um hash map usando o método .insert():

let mut capitals = HashMap::new();
capitals.insert("France", "Paris");
capitals.insert("Japan", "Tokyo");

O método .insert() recebe dois parâmetros: a chave e o valor. Neste exemplo, estamos armazenando nomes de países como chaves e suas capitais como valores.

Há um comportamento importante a ser lembrado: se você inserir uma chave que já existe no hash map, o novo valor substituirá o antigo:

capitals.insert("France", "Lyon");  // Isso sobrescreve "Paris"

Após esta operação, buscar por "France" retornaria "Lyon" em vez de "Paris". Este comportamento de sobrescrita torna o .insert() útil tanto para adicionar novas entradas quanto para atualizar as existentes em seu hash map.

challenge icon

Desafio

Fácil

Você receberá três entradas: o nome de um produto, seu preço (como um número decimal) e outro nome de produto. Crie um hash map mutável para armazenar nomes de produtos como chaves (tipo String) e seus preços como valores (tipo f64). Insira o primeiro produto com seu preço no hash map. Em seguida, insira o segundo produto com um preço de 0.0. Finalmente, atualize o preço do segundo produto para 15.99 inserindo-o novamente com o novo preço. Imprima todas as informações no formato exato mostrado abaixo.

Nota sobre .clone(): Ao inserir uma variável String como chave em um HashMap, as regras de ownership do Rust significam que a variável seria movida para o mapa e não estaria mais disponível depois disso. Para continuar usando a variável (por exemplo, para imprimir ou inserir novamente), chame .clone() nela ao passá-la para insert(). Por exemplo: map.insert(name.clone(), price).

Requisitos:

  • Importe HashMap de std::collections
  • Crie um hash map mutável com os tipos HashMap<String, f64>
  • Leia a primeira entrada como o nome do primeiro produto
  • Leia a segunda entrada e converta-a para f64 para o preço do primeiro produto
  • Insira o primeiro produto e seu preço no hash map usando .clone() no nome do produto
  • Leia a terceira entrada como o nome do segundo produto
  • Insira o segundo produto com um preço de 0.0 usando .clone() no nome do produto
  • Insira o segundo produto novamente com um preço de 15.99 usando .clone() (isso substituirá o valor anterior)
  • Imprima as informações de ambos os produtos no formato exato mostrado abaixo

Entrada:

  • Primeira linha: Nome do primeiro produto (ex: Laptop)
  • Segunda linha: Preço do primeiro produto como um número decimal (ex: 999.99)
  • Terceira linha: Nome do segundo produto (ex: Mouse)

Saída:

  • Primeira linha: Inserted [first_product] at $[price]
  • Segunda linha: Inserted [second_product] at $0.00
  • Terceira linha: Updated [second_product] to $15.99

Folha de consulta

Para inserir pares chave-valor em um hash map, use o método .insert():

let mut capitals = HashMap::new();
capitals.insert("France", "Paris");
capitals.insert("Japan", "Tokyo");

O método .insert() recebe dois parâmetros: a chave e o valor.

Se você inserir uma chave que já existe, o novo valor substituirá o antigo:

capitals.insert("France", "Lyon");  // Isso substitui "Paris"

Este comportamento de substituição torna o .insert() útil tanto para adicionar novas entradas quanto para atualizar as existentes.

Experimente você mesmo

use std::collections::HashMap;
use std::io;

fn main() {
    // Ler entradas
    let mut product1 = String::new();
    io::stdin().read_line(&mut product1).expect("Failed to read line");
    let product1 = product1.trim().to_string();
    
    let mut price1_input = String::new();
    io::stdin().read_line(&mut price1_input).expect("Failed to read line");
    let price1: f64 = price1_input.trim().parse().expect("Failed to parse price");
    
    let mut product2 = String::new();
    io::stdin().read_line(&mut product2).expect("Failed to read line");
    let product2 = product2.trim().to_string();
    
    // TODO: Escreva seu código abaixo
    // Crie um HashMap mutável, insira os produtos e imprima a saída necessária
    
}
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