There is the handy function tuples()
in the itertools. But I cannot figure out how to find what was left after taking all possible tuples.
There is the method into_buffer()
, that does exactly this, but I cannot find a way to use it in my situation.
use itertools::Itertools;
fn main() {
let src_vec = vec![1,2,3,4,5];
let tuple_vec = src_vec.iter().cloned().tuples::<(_,_,_)>().collect::<Vec<_>>();
// want to be sure that there was nothing left behind
println!("{:?}", tuple_vec);
// what I've tried
let tuples_iter = src_vec.iter().cloned().tuples::<(_,_,_)>();
let tuple_vec = tuples_iter.collect::<Vec<_>>();
//tuples_iter.into_buffer(); // Error: use of moved value: `tuples_iter`
// want to be sure that there was nothing left behind
println!("{:?}", tuple_vec);
// I can use into_buffer, but that's not what I want
let mut tuples_iter = src_vec.iter().cloned().tuples::<(_,_,_)>();
while let Some(tuple) = tuples_iter.next() {
println!("{:?}", tuple);
}
let reminder: Vec<_> = tuples_iter.into_buffer().collect_vec();
println!("{:?}", reminder)
}