假设我有一个序列.
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方法,但它似乎没有做我需要的东西.
.NET 框架 4.7.2。Visual Studio 2019。有关此错误的其他帖子中没有具体解决此问题。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Stuff
{
class Program
{
static void Main(string[] args)
{
string firstPart = "ABC 123 XYZ";
string firstPartMinusLast = string.Join(" ", firstPart.Split(' ').SkipLast(1));
Console.WriteLine(firstPartMinusLast);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我收到一个 Intellisense 错误SkipLast:
string[] 不包含“SkipLast”的定义,并且找不到接受“string[]”类型的第一个参数的可访问扩展方法“SkipLast”(您是否缺少 using 指令或程序集引用?)
根据我可以在网上找到的任何文档,using System.Linq应该涵盖这种方法吗?
我在c#中有一个字符串数组.现在根据我的要求,我必须得到最后一个,倒数第二个和在字符串中倒数第二个元素之前的一个元素,但我没有得到如何得到它.这是我的字符串数组.使用Last()我能够获得最后一个元素,但是最后一个元素,然后在倒数第二个之前我无法找到答案.
string[] arrstr = str.Split(' ');
Run Code Online (Sandbox Code Playgroud)
随着.Last()我能够得到最后一个元素,但我无法得到其余的元素.请帮我..