如何创建一个可以无限重复多个值的迭代器?

16

使用 repeat 函数我可以创建一个重复单个元素的迭代器,但是如何无限重复多个值呢?例如:

let repeat_1 = repeat(1); // 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
let repeat_123 = repeat([1, 2, 3]); // 1, 2, 3, 1, 2, 3, 1, 2, ... // or similar
2个回答

28
你可以这样使用 .cycle()
fn main() {
    let values = [1, 2, 3];
    let repeat_123 = values.iter().cloned().cycle();
    for elt in repeat_123.take(10) {
        println!("{}", elt)
    }
}

它适用于任何可以被克隆的 迭代器(迭代器本身,而非其元素)。

请注意,.cloned() 适配器是偶然的!它将切片迭代器的按引用访问的元素转换成值。

写下这个特定序列的更简单的方法是:

let repeat_123 = (1..4).cycle();

5

找到了:
根据需要,可以重复数组、元组或切片(取决于需求)。

例如:

let repeat_123 = std::iter::repeat([1, 2, 3]); // [1, 2, 3], [1, 2, 3], ...

这个迭代器是嵌套的,但是要将它展开,请使用flatmap

let pattern = &[1, 2, 3];
let repeat_123_flat = std::iter::repeat(pattern).flat_map(|x| x.iter());  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接