Удаление элементов
Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 13 из 66.
Иногда вам нужно удалять элементы из вектора, а не только добавлять их. Rust предоставляет два основных метода для удаления элементов, каждый из которых предназначен для различных ситуаций.
Метод .pop() удаляет и возвращает последний элемент из вектора:
let mut numbers = vec![10, 20, 30, 40];
let last = numbers.pop(); // удаляет 40, возвращает Some(40)
// numbers теперь [10, 20, 30]Обратите внимание, что .pop() возвращает Option — он возвращает Some(value), если был элемент для удаления, или None, если вектор уже был пуст. Это делает его использование безопасным даже для пустых векторов.
Метод .remove() удаляет элемент по указанному индексу и возвращает этот элемент:
let mut fruits = vec!["apple", "banana", "cherry"];
let removed = fruits.remove(1); // удаляет "banana"
// теперь fruits — это ["apple", "cherry"]Когда вы используете .remove(), все элементы после удаленного индекса сдвигаются влево, чтобы заполнить пустоту. Эта операция может быть медленнее для больших векторов при удалении из начала или середины, так как необходимо переместить множество элементов.
Оба метода требуют, чтобы вектор был изменяемым, так как они изменяют его содержимое. Используйте .pop(), если вам нужно удалить элемент с конца, и .remove(), если нужно удалить элемент из конкретной позиции.
Задание
ЛегкоВы получите два входных значения: во-первых, список чисел, разделенных запятыми, и во-вторых, индекс для удаления. Прочитайте оба входных значения, создайте вектор из чисел, удалите элемент по указанному индексу и выведите оставшиеся элементы на отдельных строках.
Требования:
- Прочитайте первое входное значение, содержащее числа, разделенные запятыми (например,
10,20,30,40,50) - Разделите строку по запятым и преобразуйте каждое число в целое число
- Создайте изменяемый вектор из этих чисел
- Прочитайте второе входное значение и преобразуйте его в целое число, представляющее индекс
- Используйте
.remove(), чтобы удалить элемент по этому индексу - Выведите каждый оставшийся элемент на отдельной строке
Ввод:
- Первая строка: Целые числа, разделенные запятыми (например,
10,20,30,40,50) - Вторая строка: Целое число, представляющее индекс для удаления
Вывод: Выведите каждый оставшийся элемент вектора на отдельной строке
Шпаргалка
Rust предоставляет два основных метода для удаления элементов из векторов:
Метод .pop() удаляет и возвращает последний элемент:
let mut numbers = vec![10, 20, 30, 40];
let last = numbers.pop(); // удаляет 40, возвращает Some(40)
// numbers теперь [10, 20, 30].pop() возвращает тип Option — Some(value), если элемент был удален, или None, если вектор был пуст.
Метод .remove() удаляет элемент по указанному индексу и возвращает его:
let mut fruits = vec!["apple", "banana", "cherry"];
let removed = fruits.remove(1); // удаляет "banana"
// fruits теперь ["apple", "cherry"]При использовании .remove() все элементы после удаленного индекса сдвигаются влево, чтобы заполнить пробел.
Оба метода требуют, чтобы вектор был изменяемым (mutable). Используйте .pop() для удаления с конца и .remove() для удаления из определенной позиции.
Попробуйте сами
use std::io;
fn main() {
// Прочитать числа, разделенные запятыми
let mut numbers_input = String::new();
io::stdin().read_line(&mut numbers_input).expect("Failed to read line");
// Прочитать индекс для удаления
let mut index_input = String::new();
io::stdin().read_line(&mut index_input).expect("Failed to read line");
// TODO: Напишите свой код ниже
// 1. Разделите numbers_input по запятым и преобразуйте в целые числа
// 2. Создайте изменяемый вектор из этих чисел
// 3. Преобразуйте index_input в целое число
// 4. Удалите элемент по указанному индексу
// 5. Выведите каждый оставшийся элемент на отдельной строке
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Продвинутое управление потоком выполнения
Выражение 'match'Сопоставление нескольких значенийСопоставление диапазоновВыражение 'if let'Циклы как выраженияИтоги — Простой парсер команд4Группировка данных с помощью структур
Что такое структура?Обзор структурДоступ к полям структурыИзменяемые структурыСтруктуры как параметры функцийКортежные структурыИтоги: создание структуры Book7Обработка ошибок с помощью 'Result'
Что такое 'Result'?Использование 'match' с 'Result'is_ok() и is_err()Сокращения: unwrap и expectОператор вопросительного знака '?'Парсинг строк в числаИтоги: функция безопасного деления10Замыкания и анонимные функции
Что такое замыкание?Определение простого замыканияЗамыкания с параметрамиЗахват окруженияИтоги: Простое замыкание-сумматор2Введение в векторы
Что такое вектор?Создание вектораДобавление элементов с помощью pushДоступ к элементам вектораИтерация по векторуИзменяемая итерацияУдаление элементовИтоги — Простой счетчик очков5Пары «ключ-значение» в Hash Map
Что такое Hash Map?Создание Hash MapВставка пар «ключ-значение»Доступ к значениямИтерация по Hash MapОбновление значенияУдаление парыИтоги — Счетчик слов8Проект: Простой инвентарь товаров
Настройка проектаДобавление товараПроверка наличияПродажа товараСобираем всё воедино3Список дел в командной строке
Настройка проектаДобавление задачиПросмотр всех задачУдаление задачиИтоговый код6Обработка отсутствия значения с 'Option'
Что такое 'Option'?Использование 'match' с 'Option'is_some() и is_none()Распаковка 'Option'Метод expectЗначение по умолчанию: unwrap_orИтоги: поиск элемента