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

C# 如何获取C中除最后一个元素以外的所有数组元素#,c#,arrays,C#,Arrays,我有一个这样的字符串数组 string[]使用多个字符串查询数据 我想跳过元素中的最后一个字符串,并获取剩余的字符串。我想出了一个好主意 var remStrings = queries.Reverse().Skip(1).Take(queries.Length - 1); 有更好的替代方案吗 var remStrings = queries.Take(queries.Length - 1); 不需要反转和跳过。只需比数组中少取一个元素 如果您确实希望元素按相反的顺序排列,您可以在末尾添加一

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

string[]使用多个字符串查询数据

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

var remStrings = queries.Reverse().Skip(1).Take(queries.Length - 1);
有更好的替代方案吗

var remStrings = queries.Take(queries.Length - 1);
不需要反转和跳过。只需比数组中少取一个元素

如果您确实希望元素按相反的顺序排列,您可以在末尾添加一个
.reverse()

为什么不只添加:

var remStrings = queries.Take(queries.Length-1);
这将以相同的顺序返回它们

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

var remStrings = queries.Take(queries.Length-1).Reverse();
还值得一提的是,它在一次传递中优雅地应用于任何
IEnumerable
,而无需事先知道其元素数。

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

queries = queries.Take(queries.Length - 1).ToArray();
如果您想创建一个为您执行此操作的方法,则可以使用以下方法:

public static string[] TrimLastElement(string[] arr) {
    return arr.Take(arr.Length - 1).ToArray();
}
并在代码中实现它,如下所示:

queries = TrimLastElement(queries);

Microsoft的反应式扩展团队提供了交互式扩展(NuGet“System.Interactive”),可让您执行以下操作:

var remStrings = queries.SkipLast(1);

对于现在找到这个的人

随着对范围和索引C#8和.NET Core 3.0的支持即将到来,您只需编写

var remStrings = queries[..^1]
这是

var remStrings = queries[0..^1]
这是通过将
0
1
转换为索引(
System.Index
)来实现的,其中
^
是从序列末尾到索引的标记(实际上是一个运算符)。然后从这些索引生成一个范围(
System.range
),该范围可用于访问阵列。(见附件)


目前,这只适用于.NET Core 3.0的预览版字符串数组没有
Take()
方法。我缺少什么?@TMC-Take()是IEnumerable的扩展方法。如果希望将结果数组存储在同一个变量而不是var中,则需要包含LINQ.Take(fileData.Length-1).ToArray()没有类型为
var
的变量
var
只是一个指示编译器推断类型的关键字。您的代码行与
var temp=temp.Take(temp.Length-1).ToArray()相同。我明白你想说什么,应该是
temp=temp.Take(temp.Length-1).ToArray()感谢您的反馈!我的帖子现在已被编辑。可能与