Iteração Mutável
Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 12 de 66.
Às vezes, você precisa fazer mais do que apenas ler elementos de um vetor - você precisa modificá-los. Enquanto a lição anterior mostrou como iterar e ler valores, esta lição ensina como alterar os elementos durante a iteração usando referências mutáveis.
Para modificar elementos enquanto itera, você precisa usar &mut em vez de & no seu loop for:
let mut numbers = vec![1, 2, 3, 4];
for number in &mut numbers {
*number = *number * 2;
}O &mut numbers cria uma referência mutável para o vetor, e cada iteração fornece uma referência mutável para um elemento individual. O operador * (chamado de operador de desreferência) é usado para acessar e modificar o valor real para o qual a referência aponta.
Este padrão é incrivelmente útil para transformar dados no local. Em vez de criar um novo vetor com valores modificados, você pode atualizar o existente de forma eficiente. O vetor deve ser declarado como mut para que isso funcione, já que você está alterando seu conteúdo.
Após o loop acima, numbers conteria [2, 4, 6, 8] - cada valor original dobrado no local.
Desafio
FácilEscreva uma função add_ten_to_all que recebe um vetor mutável numbers e adiciona 10 a cada elemento no próprio local (in place), retornando então o vetor modificado.
Use a iteração mutável com &mut para modificar cada elemento diretamente. Lembre-se de usar o operador de desreferência * para acessar e modificar os valores reais.
Parâmetros:
numbers(Vec<i32>): Um vetor mutável de inteiros para modificar
Retorno: O vetor modificado com 10 adicionado a cada elemento (Vec<i32>)
Folha de consulta
Para modificar elementos de um vetor durante a iteração, use referências mutáveis com &mut:
let mut numbers = vec![1, 2, 3, 4];
for number in &mut numbers {
*number = *number * 2;
}Pontos-chave:
&mut numberscria uma referência mutável para o vetor- Cada iteração fornece uma referência mutável para um elemento individual
- O operador
*(operador de desreferência) acessa e modifica o valor real - O vetor deve ser declarado como
mutpara permitir a modificação
Este padrão permite transformar dados in-place (no local) de forma eficiente, sem criar um novo vetor.
Experimente você mesmo
fn add_ten_to_all(numbers: Vec<i32>) -> Vec<i32> {
// Escreva o código aqui
}
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