Outros Slices
Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 57 de 66.
Embora os slices de string sejam muito úteis, o fatiamento não se limita apenas a strings. O conceito de slice do Rust se estende a qualquer sequência de elementos, tornando-o uma ferramenta poderosa para trabalhar com coleções sem assumir a posse (ownership).
Você pode criar fatias (slices) de arrays e vetores usando a mesma sintaxe que aprendeu para strings. Por exemplo, se você tiver um array de números, pode criar uma fatia que referencia parte ou todo ele:
let numbers = [1, 2, 3, 4, 5];
let slice: &[i32] = &numbers[1..4]; // Isso nos dá [2, 3, 4]
let full_slice: &[i32] = &numbers; // Isso referencia o array inteiroO mesmo princípio funciona com vetores. Você pode criar fatias (slices) de vetores para trabalhar com partes dos dados sem movê-los ou copiá-los:
let mut vec = vec![10, 20, 30, 40];
let vec_slice: &[i32] = &vec[0..2]; // Isso nos dá [10, 20]Desafio
FácilVocê receberá três entradas. A primeira entrada é uma lista de números separados por vírgula. A segunda entrada são dois números separados por um espaço, representando os índices de início e fim para a criação de um slice. A terceira entrada é um único número representando um índice a ser acessado a partir do slice.
Crie um vetor a partir dos números separados por vírgula e, em seguida, crie um slice usando o intervalo especificado. Acesse o elemento no índice fornecido a partir do slice e imprima-o.
Requisitos:
- Leia a primeira entrada (números separados por vírgula) e remova os espaços em branco (trim)
- Divida a entrada por vírgulas e converta cada número para
i32 - Crie um vetor a partir desses números
- Leia a segunda entrada (dois números separados por um espaço) e remova os espaços em branco (trim)
- Divida a segunda entrada por espaço para obter os índices de início e fim
- Converta ambos os índices para
usize - Crie um slice do vetor usando a sintaxe de intervalo
&vec[start..end] - Leia a terceira entrada (índice para acessar) e remova os espaços em branco (trim)
- Converta o índice para
usize - Acesse o elemento no índice especificado a partir do slice
- Imprima o elemento acessado
Entrada:
- Primeira linha: Números separados por vírgula (ex:
10,20,30,40,50) - Segunda linha: Dois números separados por um espaço (ex:
1 4) - Terceira linha: Um número de índice (ex:
2)
Saída:
- O elemento no índice especificado a partir do slice
Folha de consulta
Slices podem ser criados a partir de arrays e vetores, não apenas strings. Eles referenciam uma parte de uma coleção sem assumir a posse (ownership).
Criando slices a partir de arrays:
let numbers = [1, 2, 3, 4, 5];
let slice: &[i32] = &numbers[1..4]; // Referencia [2, 3, 4]
let full_slice: &[i32] = &numbers; // Referencia o array inteiroCriando slices a partir de vetores:
let mut vec = vec![10, 20, 30, 40];
let vec_slice: &[i32] = &vec[0..2]; // Referencia [10, 20]Slices usam a mesma sintaxe de intervalo (range) que slices de string e permitem que você trabalhe com partes dos dados sem movê-los ou copiá-los.
Experimente você mesmo
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// Lê a primeira entrada (números separados por vírgula)
let first_input = lines.next().unwrap().unwrap();
// Lê a segunda entrada (índices de início e fim)
let second_input = lines.next().unwrap().unwrap();
// Lê a terceira entrada (índice para acessar)
let third_input = lines.next().unwrap().unwrap();
// TODO: Escreva seu código abaixo
// Analise os números separados por vírgula e crie um vetor
// Analise os índices de início e fim
// Crie um slice a partir do vetor
// Acesse o elemento no índice especificado a partir do slice
// Imprima o resultado
// println!("{}", result);
}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 Final6Lidando com a Ausência com 'Option'
O que é um 'Option'?Usando 'match' com 'Option'is_some() e is_none()Fazendo o unwrap de um 'Option'O método expectFornecendo um valor padrão: unwrap_orRecapitulação - Encontrar um Elemento9Slices de String e Mais
String vs. &strCriando Slices de StringSlices como Parâmetros de FunçãoOutros SlicesRecapitulação - Encontrar a Primeira Palavra