Menu
Coddy logo textTech

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 inteiro

O 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]
challenge icon

Desafio

Fácil

Você 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 inteiro

Criando 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);
}
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