从单个元素创建迭代器

时间:2014-07-18 17:53:41

标签: rust

我想在迭代器中添加一个元素。具体来说,我想创建一个迭代器,逐步完成序列[2,3,5,7,9,...]。我能想到的最好的是

range_step_inclusive(2,2,1).chain(range_step_inclusive(3, max, 2))

但是第一个迭代器是将单个元素2作为迭代器进行攻击的一种方法。是否有更惯用的方法来创建单元素迭代器(或者将元素添加到迭代器中)?

3 个答案:

答案 0 :(得分:6)

这是std::iter::once的确切用例。

  

创建一个只产生一次元素的迭代器。

     

这通常用于将单个值调整为其他类型迭代的链()。也许你有一个几乎覆盖所有东西的迭代器,但你需要一个额外的特殊情况。也许你有一个适用于迭代器的函数,但你只需要处理一个值。

当然,range_step_inclusive is long gonestep_byB-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))

playpen