Фильтрация вектора в Rust: изучение различных методов на примерах кода

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

Метод 1: использование итераторов и метода filter
Один из способов фильтрации вектора в Rust — использование итераторов и метода filter. Этот метод позволяет определить функцию-предикат, определяющую, какие элементы следует включить в отфильтрованный вектор.

fn main() {
    let numbers = vec![1, 2, 3, 4, 5];
    let filtered_numbers: Vec<_> = numbers
        .iter()
        .filter(|&x| *x % 2 == 0) // Filter even numbers
        .collect();
    println!("{:?}", filtered_numbers);
}

Выход:

[2, 4]

Метод 2: использование метода retain
Метод retain— это еще один подход к фильтрации вектора в Rust. Он удаляет из вектора элементы, которые не удовлетворяют заданному условию.

fn main() {
    let mut numbers = vec![1, 2, 3, 4, 5];
    numbers.retain(|&x| x % 2 == 0); // Retain even numbers
    println!("{:?}", numbers);
}

Выход:

[2, 4]

Метод 3: использование цикла for
Простой, но эффективный метод фильтрации вектора в Rust — использование цикла for. Этот подход позволяет вручную перебирать вектор и выборочно добавлять в новый вектор элементы, соответствующие желаемым критериям.

fn main() {
    let numbers = vec![1, 2, 3, 4, 5];
    let mut filtered_numbers = Vec::new();
    for &number in &numbers {
        if number % 2 == 0 {
            filtered_numbers.push(number); // Add even numbers to the filtered vector
        }
    }
    println!("{:?}", filtered_numbers);
}

Выход:

[2, 4]

Метод 4: использование метода into_iterи замыкания
Метод into_iterв сочетании с замыканием предоставляет альтернативный способ фильтрации вектора в Rust.

fn main() {
    let numbers = vec![1, 2, 3, 4, 5];
    let filtered_numbers: Vec<_> = numbers
        .into_iter()
        .filter(|&x| x % 2 == 0) // Filter even numbers
        .collect();
    println!("{:?}", filtered_numbers);
}

Выход:

[2, 4]

Фильтрация векторов в Rust может осуществляться различными методами, каждый из которых имеет свои преимущества и варианты использования. В этой статье мы рассмотрели четыре различных метода: использование итераторов и метода filter, метода retain, цикла forи метода into_iterметод с замыканием. Понимая эти методы и соответствующие им примеры кода, вы сможете эффективно фильтровать векторы в Rust на основе определенных критериев.

Не забывайте экспериментировать с этими методами и адаптировать их к своим конкретным потребностям. Приятного кодирования!