如何获取除C#中最后一个元素之外的所有数组元素

Moh*_*lli 47 c# arrays

我有一个像这样的字符串数组.

string[] queries 数据多个字符串.

我想跳过元素中的最后一个字符串并取剩余的字符串.我想出来了

var remStrings = queries.Reverse().Skip(1).Take(queries.Length - 1);
Run Code Online (Sandbox Code Playgroud)

有更好的替代方案吗?

Jus*_*ner 90

var remStrings = queries.Take(queries.Length - 1);
Run Code Online (Sandbox Code Playgroud)

无需反向和跳过.只需要比阵列中少一个元素.

如果你真的想要相反的元素,你可以坚持.Reverse()到最后.

  • @TMC - Take()是IEnumerable的扩展方法.您需要包含LINQ. (4认同)

use*_*290 12

对于现在发现这个的任何人......

随着即将对范围和索引 C# 8 和 .NET Core 3.0 的支持,您可以简单地编写

var remStrings = queries[..^1]
Run Code Online (Sandbox Code Playgroud)

这是简称

var remStrings = queries[0..^1]
Run Code Online (Sandbox Code Playgroud)

这是通过将0and转换1为索引 ( System.Index) 来实现的,其中 the^是从序列末尾开始索引的标记(实际上是一个运算符)。然后从这些索引System.Range生成一个范围 ( ),然后可以使用它来访问数组。(请参阅https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8#indices-and-ranges

目前这只适用于 .NET Core 3.0 的预览版


Chr*_*isF 10

为什么不只是:

var remStrings = queries.Take(queries.Length-1);
Run Code Online (Sandbox Code Playgroud)

哪个将以相同的顺序返回它们.

.Reverse()如果这是必要的要求,则附加交换订单:

var remStrings = queries.Take(queries.Length-1).Reverse();
Run Code Online (Sandbox Code Playgroud)


Eni*_*ity 5

Microsoft的Reactive Extensions团队拥有交互式扩展(NuGet“ System.Interactive”),您可以通过以下方式进行操作:

var remStrings = queries.SkipLast(1);
Run Code Online (Sandbox Code Playgroud)