我试图以2或更多的元组迭代集合中的已排序元素。
如果我有df/df.groupby(level=[0, 1]).transform('sum')
,我可以致电
Vec
但是for window in my_vec.windows(2) {
// do something with window
}
没有被隐式排序,这将是非常好的。我尝试使用Vec
而不是BTreeSet
,但我似乎无法在其上调用Vec
。
试图打电话时
windows
我收到错误
for window in tree_set.iter().windows(2) {
// do something with window
}
答案 0 :(得分:5)
Itertools提供tuple_windows
方法:
extern crate itertools;
use itertools::Itertools;
use std::collections::BTreeSet;
fn main() {
let items: BTreeSet<_> = vec![1, 3, 2].into_iter().collect();
for (a, b) in items.iter().tuple_windows() {
println!("{} < {}", a, b);
}
}
请注意windows
是 slices 上的方法,而不是迭代器上的方法,它返回原始切片的子切片的迭代器。一个BTreeMap
可能无法提供相同的迭代器接口,因为它不是建立在连续的数据块之上;会有一些值在内存中不会紧接着后续的值。