栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Linq获取集合的最后N个元素?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Linq获取集合的最后N个元素?

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

这种方法保留了项目顺序,而无需依赖任何排序,并且在多个LINQ提供程序之间具有广泛的兼容性。

重要的是要注意不要以

Skip
负数呼叫。某些提供程序(例如,实体框架)在出现负参数时将产生ArgumentException。呼吁
Math.Max
巧妙地避免这种情况。

下面的类具有扩展方法的所有基本要素,这些要素是:静态类,静态方法和

this
关键字的使用。

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()
可能导致某些数据结构的枚举,所以此方法具有导致两次通过数据的风险。对于大多数枚举对象而言,这并不是真正的问题。实际上,已经存在针对列表,数组甚至EF查询的优化,以评估
Count()
O(1)时间的操作。

但是,如果必须使用仅向前枚举,并且希望避免进行两次遍历,请考虑像Lasse V.
Karlsen
或Mark
Byers
这样描述的一次遍历算法。这两种方法都使用临时缓冲区在枚举时保存项目,一旦找到集合的末尾便会产生这些项目。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/576263.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号