假设我有一个序列。
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/