Метод copied
Метод copied класса Iterator создаёт новый итератор,
который копирует каждый элемент исходного итератора.
Он применяется к итераторам, элементами которых являются ссылки
на типы, реализующие трейт Copy, и возвращает итератор,
выдающий уже сами скопированные значения, а не ссылки на них.
Метод не принимает параметров.
Метод copied удобен, когда нужно избавиться от ссылок
в цепочке итераторов и работать с обычными значениями,
не разыменовывая каждый элемент вручную.
Синтаксис
iter.copied()
Пример
Давайте создадим вектор чисел и получим итератор по ссылкам,
а затем с помощью метода copied преобразуем его
в итератор по значениям:
fn main()
{
let vec = vec![1, 2, 3, 4, 5];
let res: Vec<i32> = vec.iter().copied().collect();
println!("{:?}", res);
}
Результат выполнения кода:
[1, 2, 3, 4, 5]
Пример
Давайте применим метод copied к итератору по ссылкам
на строковые срезы и соберём результат в вектор:
fn main()
{
let vec = vec!["a", "b", "c", "d", "e"];
let res: Vec<&str> = vec.iter().copied().collect();
println!("{:?}", res);
}
Результат выполнения кода:
["a", "b", "c", "d", "e"]
Пример
Давайте используем метод copied вместе с методом map,
чтобы умножить каждое значение на два:
fn main()
{
let vec = vec![1, 2, 3, 4, 5];
let res: Vec<i32> = vec.iter().copied().map(|x| x * 2).collect();
println!("{:?}", res);
}
Результат выполнения кода:
[2, 4, 6, 8, 10]