Удаление элементов
Часть раздела Логика и управление потоком путешествия по 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(), когда нужно удалить элемент из определённой позиции.
Задание
ЛегкоВы получите два входных значения: сначала список чисел, разделённых запятыми, а затем индекс элемента, который нужно удалить. Стартовый код уже считывает оба входных значения и преобразует числа в изменяемый вектор numbers. Удалите элемент с указанным индексом и выведите оставшиеся элементы по одному в строке.
Требования:
- Преобразуйте второе входное значение (
index_input) в целое число, представляющее индекс - Используйте
.remove(), чтобы удалить элемент с этим индексом - Выведите каждый оставшийся элемент в отдельной строке
Ввод:
- Первая строка: целые числа, разделённые запятыми (например,
10,20,30,40,50) - Вторая строка: целое число, представляющее индекс элемента, который нужно удалить
Вывод: Выведите каждый оставшийся элемент вектора в отдельной строке
Попробуйте сами
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");
// Преобразуйте "10,20,30" в вектор: разделите строку по запятым, преобразуйте каждую часть в число и соберите результаты в Vec
let mut numbers: Vec<i32> = numbers_input
.trim()
.split(',')
.map(|s| s.trim().parse().unwrap())
.collect();
// TODO: Напишите свой код ниже
// 1. Преобразуйте index_input в целое число
// 2. Удалите элемент с указанным индексом
// 3. Выведите каждый оставшийся элемент на отдельной строке
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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Итоги: поиск элементаПотренируйтесь самостоятельно: Онлайн-компилятор Rust