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.
Desafio
FácilVocê 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
HashMapdestd::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
f64para 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.0usando.clone()no nome do produto - Insira o segundo produto novamente com um preço de
15.99usando.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
}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
1Fluxo de Controle Avançado
A Expressão 'match'Correspondência de Múltiplos ValoresCorrespondência de IntervalosA Expressão 'if let'Loops como ExpressõesRecapitulação - Parser de Comandos Simples4Agrupando Dados com Structs
O que é uma Struct?Visão Geral de StructsAcessando Campos de uma StructStructs MutáveisStructs como Parâmetros de FunçãoTuple StructsRecapitulação - Criando uma Struct Book2Introdução a Vetores
O que é um Vetor?Criando um VetorAdicionando Elementos com pushAcessando Elementos do VetorIterando sobre um VetorIteração MutávelRemovendo ElementosRecapitulação - Rastreador de Pontuação Básico5Pares Chave-Valor com Hash Maps
O que é um Hash Map?Criando um Hash MapInserindo Pares Chave-ValorAcessando ValoresIterando sobre um Hash MapAtualizando um ValorRemovendo um ParRecapitulação - Contador de Palavras8Projeto: Inventário Simples de Itens
Configuração do ProjetoAdicionando um ItemVerificando o EstoqueVendendo um ItemJuntando tudo3Lista de Tarefas via Linha de Comando
Configuração do ProjetoAdicionando uma TarefaVisualizando Todas as TarefasRemovendo uma TarefaCódigo Final