linq 扩展方法从序列末尾获取元素
有一个可枚举的扩展方法
Take<TSource>(
IEnumerable<TSource> source,
int count
)
,它从一开始就获取第一个 count
元素。
有没有办法从最后取出元素? 或者更好的方法将元素从偏移量带到末尾?
谢谢
There is the enumerable extension method
Take<TSource>(
IEnumerable<TSource> source,
int count
)
which takes the first count
elements from the start.
Is there a way to take the elements from the end?
or even better a way to take the elements from an offset to the end?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
或者
这样做会产生一些开销,因此自定义方法会更好。
更新: 自定义方法
更新: 根据 dtb 答案的想法稍微更改了代码:-)
对 Bear 的评论: 看看这个示例:
您可能会更改
lastFive2
的值,因此该方法可能不安全,或者至少不是功能性的方法。须知:
我所说的安全是指:
在这些情况下,您必须制作一份副本以确保安全。但在大多数情况下,你的方法会很好 - 并且比这更有效一点,所以+1:)
一个想法是使用仅具有内部 Enqueue 等的队列。
or
There is some overhead in doing this so a custom method would be better.
Update: A custom method
Update: Changed the code a littlebit with ideas from dtb´s answer :-)
Comment to Bear: Look at this example:
You could potentially change the values of
lastFive2
and therefore that approach can be unsafe or at least it´s not the functional way.To Bear:
What I meant about safe is this:
In these cases you would have to make a copy to be sure. But in most cases your way would be fine - and a little bit more efficient than this so +1 :)
An idea is to use a queue which only have internal Enqueue etc.
MoreLINQ 提供了TakeLast 扩展方法:
要从偏移量到末尾获取元素,Enumerable.Skip 应该可以解决问题:
MoreLINQ provides a TakeLast extension method:
To take the elements from an offset to the end, Enumerable.Skip should do the trick:
@lasseespeholt:
@lasseespeholt:
关于性能的说明。这里有很多关于 IEnumerable<> 的答案,这可能就是您需要并且应该使用的。
但是,如果数据集很大并且类型为
List<>
或类似类型,则可以使用以下方法来防止大量不必要的迭代:A note on performance. Plenty of answers here operating on
IEnumerable<>
and that is probably what you need and should use.But if the datasets are large and of type
List<>
or similar, you can prevent a lot of unnecessary iterating with something like: