簡體   English   中英

collect_into 的穩定替代品 - 或者 - 我如何收集大小隊列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM