Функция successors
Функция successors создаёт итератор, который
начинает с указанного начального значения, а каждое
последующее значение вычисляет путём применения
заданной функции к предыдущему значению. Первым
параметром функция принимает начальное значение,
а вторым - функцию, которая принимает текущее
значение и возвращает Option со следующим
значением. Когда функция возвращает None,
итератор завершается.
Синтаксис
std::iter::successors(seed, f)
Пример
Давайте создадим итератор, который генерирует
последовательность чисел, начиная с 1,
где каждое следующее число умножается на 2:
fn main()
{
let res: Vec<i32> = std::iter::successors(Some(1), |&n| Some(n * 2))
.take(6)
.collect();
println!("{:?}", res);
}
Результат выполнения кода:
[1, 2, 4, 8, 16, 32]
Пример
Давайте создадим итератор, который генерирует
последовательность чисел Фибоначчи, начиная
с пары (0, 1):
fn main()
{
let res: Vec<u32> = std::iter::successors(Some((0, 1)), |&(a, b)| Some((b, a + b)))
.map(|(a, _)| a)
.take(8)
.collect();
println!("{:?}", res);
}
Результат выполнения кода:
[0, 1, 1, 2, 3, 5, 8, 13]
Пример
Давайте создадим итератор, который генерирует
последовательность степеней числа 3,
но завершается, когда значение превышает 100:
fn main()
{
let res: Vec<i32> = std::iter::successors(Some(1), |&n| {
let next = n * 3;
if next > 100 { None } else { Some(next) }
})
.collect();
println!("{:?}", res);
}
Результат выполнения кода:
[1, 3, 9, 27, 81]