Перейти к содержанию

Rust коллекции и дженерики

Posted on:26 июня 2023 г. at 09:01

Example Dynamic OG Image link В этой статье мы рассмотрим коллекции и дженерики Rust, две важные функции для написания эффективного и многоразового кода. Мы начнем с базовых примеров и постепенно перейдем к более продвинутым сценариям использования, чтобы помочь вам освоить эти мощные концепции.

Коллекции в Rust

Rust предоставляет несколько типов коллекций для хранения и организации данных, в том числе:

  1. Векторы: массивы с возможностью изменения размера, в которых хранятся элементы одного типа.
  2. Строки: текст в кодировке UTF-8.
  3. ХешКарты: пары «ключ-значение» для эффективного поиска данных.

Векторы

Векторы в Rust аналогичны динамическим массивам или ArrayList на других языках. Они могут расти или уменьшаться в размере и хранить элементы одного типа.

// Создание пустого вектора
let mut numbers: Vec<i32> = Vec::new();

// Добавление элементов к вектору
numbers.push(1);
numbers.push(2);
numbers.push(3);

// Доступ к элементам с помощью индекса
println!("First element: {}", numbers[0]);

Строки

В Rust строки кодируются UTF-8 и могут быть созданы с помощью String или &str.

// Создание строки из строкового литерала
let s: String = String::from("hello");

// Конкатенация строк
let mut s1 = String::from("hello");
let s2 = " world";
s1.push_str(s2);
println!("{}", s1);

Хеш-карты

Хеш-карта хранит пары ключ-значение и обеспечивает быстрый поиск на основе ключей.

use std::collections::HashMap;

let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 50);

let team_name = String::from("Blue");
let score = scores.get(&team_name);
println!("Score: {:?}", score);

Дженерики в Rust

Дженерики позволяют создавать функции и типы данных, которые могут работать с несколькими типами, что приводит к более многоразовому и эффективному кодированию.

Дженерики в функциях

В Rust можно использовать дженерики для создания функций, работающих с различными типами.

fn identity<T>(value: T) -> T {
    value
}

let a = identity(42);
let b = identity(3.14);

Дженерики в структурах

Можно также создать общие структуры для хранения значений различных типов.

struct Point<T> {
    x: T,
    y: T,
}

let int_point = Point { x: 1, y: 2 };
let float_point = Point { x: 1.0, y: 2.0 };