首頁 >後端開發 >C++ >如何使用 LINQ 高效率檢索集合的最後 N 個元素?

如何使用 LINQ 高效率檢索集合的最後 N 個元素?

Linda Hamilton
Linda Hamilton原創
2025-01-04 19:56:44851瀏覽

How Can I Efficiently Retrieve the Last N Elements of a Collection Using LINQ?

使用 LINQ 確定集合的最後 N 個元素

從集合中檢索指定數量的結束元素可能是一個常見的需求。雖然框架可能沒有提供專用方法,但擴展方法可能會有所幫助。

使用 TakeLast 擴展方法

提取最後 N 個元素的有效方法利用LINQ 的 Skip 方法。以下程式碼說明了其用法:

collection.Skip(Math.Max(0, collection.Count() - N));

保留專案順序,此技術避免排序並確保與各種 LINQ 提供者的兼容性。必須採取預防措施,避免向 Skip 傳遞負參數,因為某些提供者(例如實體框架)可能會引發異常。

實現擴展方法

下面的代碼提供自定義TakeLast 擴展方法:

public static class MiscExtensions
{
    // Ex: collection.TakeLast(5);
    public static IEnumerable<T> TakeLast<T>(this IEnumerable<T> source, int N)
    {
        return source.Skip(Math.Max(0, source.Count() - N));
    }
}

性能注意事項

根據資料結構,計數(透過Count())可能會導致多個枚舉。雖然針對某些資料類型和場景存在最佳化,但此方法可能不適用於僅前向枚舉。

替代單通道演算法

在效能較差的情況下可以採用關鍵的、替代的一次性演算法。這些方法利用臨時緩衝區來累積項目,一旦到達集合末端就會產生最後 N 個元素。 Lasse V. Karlsen 和 Mark Byers 所發展的技術就是這類演算法的例證。

以上是如何使用 LINQ 高效率檢索集合的最後 N 個元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn