Menu
CoddyTech

Usuwanie elementów

Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 13 z 66.

Czasami trzeba usuwać elementy z wektora, a nie tylko je dodawać. Rust udostępnia dwie główne metody usuwania elementów, z których każda jest przeznaczona do innych sytuacji.

Metoda .pop() usuwa i zwraca ostatni element z wektora:

let mut numbers = vec![10, 20, 30, 40];
let last = numbers.pop(); // usuwa 40, zwraca Some(40)
// numbers zawiera teraz [10, 20, 30]

Zwróć uwagę, że .pop() zwraca wartość typu Option — daje Some(value), jeśli był element do usunięcia, lub None, jeśli wektor był już pusty. Dzięki temu można bezpiecznie używać tej metody nawet w przypadku pustych wektorów.

Metoda .remove() usuwa element o określonym indeksie i zwraca ten element:

let mut fruits = vec!["apple", "banana", "cherry"];
let removed = fruits.remove(1); // usuwa "banana"
// fruits zawiera teraz ["apple", "cherry"]

Gdy używasz .remove(), wszystkie elementy za usuniętym indeksem przesuwają się w lewo, aby wypełnić lukę. Ta operacja może być wolniejsza w przypadku dużych wektorów, gdy usuwasz element z początku lub środka, ponieważ trzeba przesunąć wiele elementów.

Obie metody wymagają, aby wektor był mutowalny, ponieważ modyfikują jego zawartość. Wybierz .pop(), gdy chcesz usunąć element z końca, a .remove(), gdy chcesz usunąć element z określonej pozycji.

challenge icon

Wyzwanie

Łatwy

Otrzymasz dwa wejścia: najpierw listę liczb oddzielonych przecinkami, a następnie indeks elementu do usunięcia. Kod początkowy odczytuje już oba wejścia i zamienia liczby w modyfikowalny wektor numbers. Usuń element o podanym indeksie i wypisz pozostałe elementy w osobnych wierszach.

Wymagania:

  • Przekonwertuj drugie wejście (index_input) na liczbę całkowitą reprezentującą indeks
  • Użyj .remove(), aby usunąć element o tym indeksie
  • Wypisz każdy pozostały element w osobnym wierszu

Dane wejściowe:

  • Pierwszy wiersz: liczby całkowite oddzielone przecinkami (np. 10,20,30,40,50)
  • Drugi wiersz: liczba całkowita reprezentująca indeks elementu do usunięcia

Dane wyjściowe: Wypisz każdy pozostały element wektora w osobnym wierszu

Spróbuj swoich sił

use std::io;

fn main() {
    // Wczytaj liczby oddzielone przecinkami
    let mut numbers_input = String::new();
    io::stdin().read_line(&mut numbers_input).expect("Failed to read line");
    
    // Wczytaj indeks elementu do usunięcia
    let mut index_input = String::new();
    io::stdin().read_line(&mut index_input).expect("Failed to read line");
    
    // Zamienia "10,20,30" na wektor: podziel tekst w miejscach przecinków, przekształć każdą część w liczbę i zbierz wyniki do Vec
    let mut numbers: Vec<i32> = numbers_input
        .trim()
        .split(',')
        .map(|s| s.trim().parse().unwrap())
        .collect();
    
    // TODO: Napisz swój kod poniżej
    // 1. Przekształć index_input w liczbę całkowitą
    // 2. Usuń element o podanym indeksie
    // 3. Wypisz każdy pozostały element w osobnym wierszu
    
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator Rust online