c# - 如何使用 LINQ 获取序列中除最后一个元素之外的所有元素?

标签 c# .net linq

假设我有一个序列。

IEnumerable<int> sequence = GetSequenceFromExpensiveSource();
// sequence now contains: 0,1,2,3,...,999999,1000000

获取序列并不便宜,而且是动态生成的,我只想遍历一次。

我想得到 0 - 999999(即除最后一个元素以外的所有元素)

我知道我可以做类似的事情:

sequence.Take(sequence.Count() - 1);

但这会导致对大序列进行两次枚举。

是否有一个 LINQ 结构可以让我这样做:

sequence.TakeAllButTheLastElement();

最佳答案

Enumerable.SkipLast(IEnumerable<TSource>, Int32) .NET Standard 2.1 中添加了方法。它完全符合您的要求。

IEnumerable<int> sequence = GetSequenceFromExpensiveSource();

var allExceptLast = sequence.SkipLast(1);

来自 https://learn.microsoft.com/en-us/dotnet/api/system.linq.enumerable.skiplast

Returns a new enumerable collection that contains the elements from source with the last count elements of the source collection omitted.

关于c# - 如何使用 LINQ 获取序列中除最后一个元素之外的所有元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1779129/

相关文章:

c# - 4.5.1也是4.0和4.5的就地升级吗?

c# - IIS后台进程

c# - WebRequest 是与网站交互的正确 C# 工具吗?

c# - 具有 if else 条件的 Linq GroupBy 对象

c# - 计时器、UI 框架和不良耦合——有什么想法吗?

c# - C#应用程序启动时显示多个窗体

c# - 以编程方式计算 DOCX 文档中具有特定样式的字符/单词/段落的数量

c# - ((IEnumerable)source).OfType<T>() 和 source as IEnumerable<T> 之间有什么区别

c# - 使用c#获取两个不同对象的公共(public)属性

c# - 如何在非托管内存中分配 IntPtr [] 数组?