假设我有一个序列.
IEnumerable<int> sequence = GetSequenceFromExpensiveSource();
// sequence now contains: 0,1,2,3,...,999999,1000000
Run Code Online (Sandbox Code Playgroud)
获取序列并不便宜并且是动态生成的,我想只迭代一次.
我想得到0 - 999999(即除了最后一个元素之外的所有东西)
我知道我可以这样做:
sequence.Take(sequence.Count() - 1);
Run Code Online (Sandbox Code Playgroud)
但是这导致了两个大序列的枚举.
是否有LINQ结构可以让我这样做:
sequence.TakeAllButTheLastElement();
Run Code Online (Sandbox Code Playgroud) 看起来像是一个简单的LINQ任务(可能是它),但我无法弄清楚如何使用LINQ删除最后一项序列.使用Take并传递序列的长度 - 1当然可以正常工作.但是,在单行代码中链接多个LINQ时,这种方法似乎非常不方便.
IEnumerable<T> someList ....
// this works fine
var result = someList.Take(someList.Count() - 1);
// but what if I'm chaining LINQ ?
var result = someList.Where(...).DropLast().Select(...)......;
// Will I have to break this up?
var temp = someList.Where(...);
var result = temp.Take(temp.Count() - 1).Select(...)........;
Run Code Online (Sandbox Code Playgroud)
在Python中,我可以做seq [0:-1].我尝试将-1传递给Take方法,但它似乎没有做我需要的东西.