使用 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中文網其他相關文章!