Другие срезы
Часть раздела Логика и управление потоком путешествия по Rust на Coddy. Урок 57 из 66.
Хотя срезы строк очень полезны, slicing не ограничивается только строками. Концепция срезов Rust распространяется на любую последовательность элементов, что делает её мощным инструментом для работы с коллекциями без получения владения.
Вы можете создавать срезы из массивов и векторов, используя тот же синтаксис, который вы изучили для строк. Например, если у вас есть массив numbers, вы можете создать срез, который ссылается на его часть или весь массив:
let numbers = [1, 2, 3, 4, 5];
let slice: &[i32] = &numbers[1..4]; // Это даёт нам [2, 3, 4]
let full_slice: &[i32] = &numbers; // Это ссылается на весь массивТот же принцип работает с векторами. Вы можете создать срезы из векторов, чтобы работать с частями data, не перемещая и не копируя их:
let mut vec = vec![10, 20, 30, 40];
let vec_slice: &[i32] = &vec[0..2]; // Это даёт нам [10, 20]Задание
ЛегкоВы получите три входных значения. Первое входное значение — это список чисел, разделённых запятыми. Второе входное значение — это два числа, разделённых пробелом, которые обозначают начальный и конечный индексы для создания среза. Третье входное значение — это одно число, обозначающее индекс для доступа к элементу среза.
Create вектор из чисел, разделённых запятыми, затем Create срез, используя specified диапазон. Получите доступ к element по заданному индексу из среза и выведите его.
Требования:
- Read первое входное значение (числа, разделённые запятыми) и удалите пробельные символы
- Split входное значение по запятым и Parse каждое число в
i32 - Create вектор из этих чисел
- Read второе входное значение (два числа, разделённые пробелом) и удалите пробельные символы
- Split второе входное значение по пробелу, чтобы получить start и end indices
- Parse оба индекса в
usize - Create срез из вектора, используя синтаксис диапазона
&vec[start..end] - Read третье входное значение (index для доступа) и удалите пробельные символы
- Parse index в
usize - Получите доступ к element по specified индексу из среза
- Print полученный element
Входные данные:
- Первая строка: числа, разделённые запятыми (например,
10,20,30,40,50) - Вторая строка: два числа, разделённые пробелом (например,
1 4) - Третья строка: число-индекс (например,
2)
Выходные данные:
- element по specified индексу из среза
Попробуйте сами
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// Прочитать первый ввод (числа, разделённые запятыми)
let first_input = lines.next().unwrap().unwrap();
// Прочитать второй ввод (начальный и конечный индексы)
let second_input = lines.next().unwrap().unwrap();
// Прочитать третий ввод (индекс для доступа)
let third_input = lines.next().unwrap().unwrap();
// TODO: Напишите ваш код ниже
// Разобрать числа, разделённые запятыми, и создать вектор
// Разобрать начальный и конечный индексы
// Создать срез из вектора
// Получить доступ к элементу по указанному индексу из среза
// Вывести результат
// println!("{}", result);
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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Итоги: поиск элемента9Срезы строк и не только
String и &strСоздание срезов строкСрезы как параметры функцийДругие срезыИтоги: поиск первого словаПотренируйтесь самостоятельно: Онлайн-компилятор Rust