使用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
Run Code Online (Sandbox Code Playgroud)
blu*_*uss 17
你可以.cycle()像这样使用:
fn main() {
let values = [1, 2, 3];
let repeat_123 = values.iter().cloned().cycle();
for elt in repeat_123.take(10) {
println!("{}", elt)
}
}
Run Code Online (Sandbox Code Playgroud)
它适用于任何迭代器可以被克隆(在迭代器,而不是它的元素).
请注意,.cloned()适配器是偶然的!它将切片迭代器的by-reference迭代器元素转换为值.
编写此特定序列的更简单方法是:
let repeat_123 = (1..4).cycle();
Run Code Online (Sandbox Code Playgroud)
发现:
还可以是repeat数组、元组或切片(取决于需要)。
例如:
let repeat_123 = std::iter::repeat([1, 2, 3]); // [1, 2, 3], [1, 2, 3], ...
Run Code Online (Sandbox Code Playgroud)
这个迭代器是嵌套的,但是,要展平它,请使用flatmap
let pattern = &[1, 2, 3];
let repeat_123_flat = std::iter::repeat(pattern).flat_map(|x| x.iter());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2186 次 |
| 最近记录: |