Метод partition
Метод partition разделяет итератор
на две коллекции: в первую попадают элементы,
для которых предикат вернул true, а во вторую -
элементы, для которых предикат вернул false.
Параметром метод принимает замыкание-предикат,
которое определяет, в какую коллекцию попадёт элемент.
Метод возвращает кортеж из двух коллекций.
Синтаксис
iterator.partition(predicate)
Пример
Давайте разделим вектор чисел на чётные и нечётные:
fn main()
{
let vec = vec![1, 2, 3, 4, 5];
let (even, odd): (Vec<i32>, Vec<i32>) = vec
.into_iter()
.partition(|x| x % 2 == 0);
println!("{:?}", even);
println!("{:?}", odd);
}
Результат выполнения кода:
[2, 4]
[1, 3, 5]
Пример
Давайте разделим вектор строк по длине строки:
fn main()
{
let vec = vec!["a", "b", "c", "d", "e"];
let (short, long): (Vec<&str>, Vec<&str>) = vec
.into_iter()
.partition(|s| s.len() < 2);
println!("{:?}", short);
println!("{:?}", long);
}
Результат выполнения кода:
["a", "b", "c", "d", "e"]
[]
Пример
Давайте разделим вектор чисел на положительные и отрицательные:
fn main()
{
let vec = vec![1, 2, 3, 4, 5];
let (positive, negative): (Vec<i32>, Vec<i32>) = vec
.into_iter()
.partition(|x| x > &0);
println!("{:?}", positive);
println!("{:?}", negative);
}
Результат выполнения кода:
[1, 2, 3, 4, 5]
[]