Метод next
Метод next возвращает следующий элемент итератора.
Он является основным методом трейта Iterator и
возвращает значение типа Option<T>: вариант
Some с очередным элементом, если он есть, или
None, когда итератор исчерпан. Параметров метод
не принимает, но принимает изменяемую ссылку на самого
себя, поэтому итератор должен быть объявлен как
mut.
Синтаксис
iterator.next()
Пример
Давайте получим первый элемент итератора из вектора
vec![1, 2, 3, 4, 5]:
fn main()
{
let mut iter = vec![1, 2, 3, 4, 5].into_iter();
let res = iter.next();
println!("{:?}", res);
}
Результат выполнения кода:
Some(1)
Пример
Давайте последовательно получим несколько элементов итератора, чтобы увидеть, как он продвигается вперёд:
fn main()
{
let mut iter = vec![1, 2, 3, 4, 5].into_iter();
println!("{:?}", iter.next());
println!("{:?}", iter.next());
println!("{:?}", iter.next());
}
Результат выполнения кода:
Some(1)
Some(2)
Some(3)
Пример
Давайте вызовем next больше раз, чем элементов
в итераторе, и посмотрим, что вернётся после его
исчерпания:
fn main()
{
let mut iter = vec![1, 2].into_iter();
println!("{:?}", iter.next());
println!("{:?}", iter.next());
println!("{:?}", iter.next());
}
Результат выполнения кода:
Some(1)
Some(2)
None
Пример
Давайте используем next для обхода итератора
в цикле while let и выведем все элементы строк:
fn main()
{
let mut iter = vec!["a", "b", "c", "d", "e"].into_iter();
while let Some(item) = iter.next() {
println!("{}", item);
}
}
Результат выполнения кода:
"a"
"b"
"c"
"d"
"e"