gpt4 book ai didi

rust - 如何在for循环中从迭代器中获取多个值?

转载 作者:行者123 更新时间:2023-12-03 11:32:37 24 4
gpt4 key购买 nike

我有一个无限的迭代器,我想从迭代器中打印不同的切片。
因此,如果我在控制台中调用extract(8,&[1,2,3,4]),我想查看/获取:

1
2 3
4 1 2
3 4 1 2
3 4 1 2 3
4 1 2 3 4 1
2 3 4 1 2 3 4
我的尝试:
fn extract(n: usize, seq: &[u16]) {
let mut iterator = seq.iter().cycle();

for it in 1..n {
iterator.take(it).for_each(|x| print!("{} ", x)); // <- Problem is here
print!("\n");
}
}
当我编译时:
warning: variable does not need to be mutable
--> src/lib.rs:2:9
|
2 | let mut iterator = seq.iter().cycle();
| ----^^^^^^^^
| |
| help: remove this `mut`
|
= note: `#[warn(unused_mut)]` on by default

error[E0382]: use of moved value: `iterator`
--> src/lib.rs:5:9
|
2 | let mut iterator = seq.iter().cycle();
| ------------ move occurs because `iterator` has type `std::iter::Cycle<std::slice::Iter<'_, u16>>`, which does not implement the `Copy` trait
...
5 | iterator.take(it).for_each(|x| println!("{} ", x));
| ^^^^^^^^ value moved here, in previous iteration of loop
我知道迭代器会在每次循环迭代中更改其值。这就是为什么我将其标记为变异var。但是不知何故, iterator var用作函数的参数(我看不到),并且迭代器已 move 。因此,在下一个循环迭代中, iterator var超出范围,并且出现 move 值错误。
为了更好地理解我的代码:
  • 我的迭代器变量将移到哪里?
  • 如何在没有此问题的情况下在循环内使用迭代器?
  • 最佳答案

    正如其他人所写,take消耗了您的迭代器。为了避免这种情况,可以使用by_ref包裹原始迭代器,并且可以在不使用原始迭代器的情况下使用它

    fn extract(n: usize, seq: &[u16]) {
    let mut iterator = seq.iter().cycle();

    for it in 1..n {
    iterator.by_ref().take(it).for_each(|x| println!("{} ", x));
    print!("\n");
    }
    }

    关于rust - 如何在for循环中从迭代器中获取多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63014379/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com