我想在迭代器中添加一个元素。具体来说,我想创建一个迭代器,逐步完成序列[2,3,5,7,9,...]。我能想到的最好的是
range_step_inclusive(2,2,1).chain(range_step_inclusive(3, max, 2))
但是第一个迭代器是将单个元素2作为迭代器进行攻击的一种方法。是否有更惯用的方法来创建单元素迭代器(或者将元素添加到迭代器中)?
答案 0 :(得分:6)
这是std::iter::once
的确切用例。
创建一个只产生一次元素的迭代器。
这通常用于将单个值调整为其他类型迭代的链()。也许你有一个几乎覆盖所有东西的迭代器,但你需要一个额外的特殊情况。也许你有一个适用于迭代器的函数,但你只需要处理一个值。
当然,range_step_inclusive
is long gone。 step_by
为B-unstable and P-medium on nightly。 (链接的相同SO线程包含a back-fill for stable。)因为我无论如何都在夜间使用,所以我们也使用inclusive range syntax(..=
){{3} }
所以,
iter::once(2).chain((3..=max).step_by(2))
答案 1 :(得分:4)
它不是一个样板,但我想它更清楚:
Repeat::new(2i).take(1).chain(range_step_inclusive(3, max, 2))
Repeat::new
将根据您提供的值创建无限迭代器。 Take将只生成该迭代器的第一个值。其余的并不是什么新鲜事。
您可以在链接后面的游戏围栏上运行此示例:http://is.gd/CZbxD3
答案 2 :(得分:4)
您可以使用the Option
by-value iterator, move_iter
:
Some(2i).move_iter().chain(iter::range_step_inclusive(3i, max, 2))