我想在迭代器中添加一个元素.具体来说,我想创建一个迭代器,逐步完成序列[2,3,5,7,9,...].我能想到的最好的是
range_step_inclusive(2,2,1).chain(range_step_inclusive(3, max, 2))
Run Code Online (Sandbox Code Playgroud)
但是第一个迭代器是将单个元素2作为迭代器的一种破解.是否有更惯用的方法来创建单元素迭代器(或将元素添加到迭代器中)?
这是确切的用例std::iter::once.
创建一个只产生一次元素的迭代器.
这通常用于将单个值调整为其他类型迭代的链().也许你有一个几乎覆盖所有东西的迭代器,但你需要一个额外的特殊情况.也许你有一个可以在迭代器上运行的函数,但是你只需要处理一个值.
当然,range_step_inclusive 早已不复存在.有step_by其是B-不稳定和夜间P-介质.(相同的SO线程链接包含一个稳定的反向填充.)因为我无论如何都在夜间使用,所以我们也使用包含范围语法(..=),它正朝着稳定化方向发展(评论)
所以,
iter::once(2).chain((3..=max).step_by(2))
Run Code Online (Sandbox Code Playgroud)
它不是样板,但我想它更清楚:
Repeat::new(2i).take(1).chain(range_step_inclusive(3, max, 2))
Repeat::new将根据您提供的值创建一个无限的迭代器。Take将仅产生该迭代器的第一个值。其余的都不是新鲜事物。
您可以通过以下链接在游戏围栏上运行此示例:http : //is.gd/CZbxD3
您可以使用该Option按值迭代器,move_iter:
Some(2i).move_iter().chain(iter::range_step_inclusive(3i, max, 2))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2125 次 |
| 最近记录: |