我有一个管道,它可以操作一个迭代器,处理一个非常大的数据集,最后,我希望只保留N个最大的值。
我写了一个Vec的 Package 器--一个保存Vec及其最大大小的结构体,并实现了插入,使得Vec中的数据总是有序的,太小的值会被忽略(如果N足够大,也可以使用BTreeSet)。
不管怎样,我想我会这样使用它:
let mut q = SizedQueue(5);
<my iterator pipleline>.collect_into(&mut q);
但我失望地发现collect_into是不稳定的,并且可能会因为认为它是不必要的而被丢弃,给出的原因是可以用不同的方法来完成它。
我的问题是--如何才能做得不同(除了我自己用这个功能实现一个Trait for Iterator之外)?
1条答案
按热度按时间lyfkaqu11#
collect_into()
只是调用Extend::extend()
的一个方便快捷方式:当然,您需要为您的类型实现
Extend
,一个简单的实现可能如下所示:但是如果这只用于一个调用
extend()
的站点,那么您也可以直接内联它,然后循环和push()
。