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