Метод fuse
Метод fuse создаёт новый итератор, который после того,
как исходный итератор вернёт None хотя бы один раз,
всегда будет возвращать None при последующих вызовах
метода next. Это полезно, когда исходный итератор
после возврата None может снова начать возвращать
значения Some - что нарушает контракт итераторов.
Метод не принимает параметров и возвращает новый итератор
типа Fuse.
Синтаксис
iter.fuse()
Пример
Давайте создадим вектор и получим из него итератор,
затем обернём его в fuse и несколько раз вызовем
метод next:
fn main()
{
let v = vec![1, 2, 3];
let mut iter = v.iter().fuse();
println!("{:?}", iter.next());
println!("{:?}", iter.next());
println!("{:?}", iter.next());
println!("{:?}", iter.next());
println!("{:?}", iter.next());
}
Результат выполнения кода:
Some(1)
Some(2)
Some(3)
None
None
Пример
Давайте применим fuse к итератору и соберём все
элементы в вектор с помощью метода collect:
fn main()
{
let v = vec![10, 20, 30];
let res: Vec<i32> = v.iter().fuse().cloned().collect();
println!("{:?}", res);
}
Результат выполнения кода:
[10, 20, 30]
Пример
Давайте посчитаем количество элементов итератора,
обёрнутого в fuse, с помощью метода count:
fn main()
{
let v = vec!["a", "b", "c", "d", "e"];
let res = v.iter().fuse().count();
println!("{}", res);
}
Результат выполнения кода:
5
Смотрите также
-
типаж
FusedIterator,
который гарантирует завершаемость итератора -
метод
next,
который возвращает следующий элемент итератора -
метод
peekable,
который позволяет заглядывать в следующий элемент -
метод
collect,
который собирает элементы итератора в коллекцию