[英]Stable alternative to collect_into - or - how do I collect a sized queue?
我有一些管道將迭代器操作到一個非常大的數據集,最后,我希望只保留 N 個最高值。
我圍繞 Vec 編寫了一個包裝器 - 一個包含 Vec 及其最大大小的結構,並實現插入,以便 vec 中的數據始終有序,並且太小的值將被忽略(也可以使用 BTreeSet,如果 N 足夠大)。
無論如何,我想我會按如下方式使用它:
let mut q = SizedQueue(5);
<my iterator pipleline>.collect_into(&mut q);
但我很失望地發現 collect_into 不穩定,並且可能會被刪除,因為它可能被認為是不必要的,給出的原因是它可以以不同的方式完成。
我的問題是 - 它怎么能以不同的方式完成(除了我自己用這個功能實現迭代器的特征之外)?
collect_into()
只是調用Extend::extend()
的便捷快捷方式:
let mut q = SizedQueue(5);
q.extend(<my iterator pipleline>);
當然,您需要為您的類型實現Extend
。 一個簡單的實現可能如下所示:
impl<T: PartialOrd> Extend<T> for SizedQueue<T> {
fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I) {
for item in iter {
self.push(item);
}
}
}
但是,如果這僅適用於您調用extend()
的一個使用站點,您也可以將其內聯並循環和push()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.