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

时间:2010-07-16 12:33:44

标签: c# arrays

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

string[] queries,数据多个字符串。

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

var remStrings = queries.Reverse().Skip(1).Take(queries.Length - 1);

还有更好的选择吗?

6 个答案:

答案 0 :(得分:81)

var remStrings = queries.Take(queries.Length - 1);

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

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

答案 1 :(得分:9)

为什么不只是:

var remStrings = queries.Take(queries.Length-1);

将以相同的顺序返回它们。

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

var remStrings = queries.Take(queries.Length-1).Reverse();

答案 2 :(得分:5)

Microsoft的Reactive Extensions'团队拥有可以执行此操作的Interactive Extensions(NuGet" System.Interactive"):

var remStrings = queries.SkipLast(1);

答案 3 :(得分:2)

This answer from a related post也值得一提,因为它在一次传递中优雅地适用于任何IEnumerable,而无需预先知道其元素数量。

答案 4 :(得分:1)

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

借助即将支持的范围和索引C#8和.NET Core 3.0,您可以轻松编写

var remStrings = queries[..^1]

这是

的缩写
var remStrings = queries[0..^1]

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

当前,这仅在.NET Core 3.0的预览版中有效

答案 5 :(得分:0)

<强>编辑: 您可以使用相同的数组替换您的数组,使用以下行或代码替换最后一个元素:

queries = queries.Take(queries.Length - 1).ToArray();

如果您想创建一个为您执行此操作的方法,则可以使用以下内容:

public static string[] TrimLastElement(string[] arr) {
    return arr.Take(arr.Length - 1).ToArray();
}

并在代码中实现它:

queries = TrimLastElement(queries);