[1,2,2,3,4,4]
は、[2,4]
を生成するはずの番号だけを見つける必要があります。次の番号を覗いてみる必要があるので、Peekable
iteratorを試してみてfilter
と書いてみました。フィルタークローズでPeekableイテレーターを使用するにはどうすればよいですか?
fn main() {
let xs = [1, 2, 2, 3, 4, 4];
let mut iter = xs.iter().peekable();
let pairs = iter.filter(move |num| {
match iter.peek() {
Some(next) => num == next,
None => false,
}
});
for num in pairs {
println!("{}", num);
}
}
私はエラーを取得する:
error[E0382]: capture of moved value: `iter`
--> src/main.rs:6:15
|
5 | let pairs = iter.filter(move |num| {
| ---- value moved here
6 | match iter.peek() {
| ^^^^ value captured here after move
|
= note: move occurs because `iter` has type `std::iter::Peekable<std::slice::Iter<'_, i32>>`, which does not implement the `Copy` trait
私はiter
が閉鎖によって使用されているため、これはあると思うが、それはそれを借りていない、そしてそれは、それをコピーすることはできません。
フィルタ内のイテレータを参照したいというこの問題をどのように解決できますか?
、[ '.windows()'](https://でドキュメントを。 rust-lang.org/std/slice/struct.Windows.html)は、ウィンドウとしてサブスライスを生成します。これは、汎用ではありませんが、 'tuple_windows'と比較的同等です。 –