使用 LINQ 检索集合的最后 N 个元素
在 LINQ 中,可以通过组合来获取集合的最后 N 个元素Skip() 和 Count() 方法。 Skip() 方法允许您从集合的开头跳过指定数量的元素,而 Count() 则返回集合中元素的总数。
要获取最后 N 个元素,我们可以确定集合的总数并从中减去 N。然后将结果值传递给 Skip() 以跳过前 (count - N) 个元素,只留下最后 N 个元素。这可以表示为:
collection.Skip(Math.Max(0, collection.Count() - N));
这种方法有效地允许保留元素顺序而不需要排序。它还确保跨多个 LINQ 提供程序的兼容性。
扩展方法实现
以下是利用上述方法的 TakeLast(int N) 的扩展方法实现:
public static class MiscExtensions { public static IEnumerable<T> TakeLast<T>(this IEnumerable<T> source, int N) { return source.Skip(Math.Max(0, source.Count() - N)); } }
这个扩展方法可以用作如下:
collection.TakeLast(5);
性能注意事项
虽然这种方法通常很有效,但值得考虑调用 Count() 对某些数据结构的影响。在某些情况下,这可能会导致枚举整个数据结构。在需要仅前向枚举并且需要避免多次传递数据的情况下,可以进一步优化性能。对于这种情况,可以采用利用临时缓冲区的替代一次性算法。
以上是如何高效地检索 LINQ 集合的最后 N 个元素?的详细内容。更多信息请关注PHP中文网其他相关文章!