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()代码>感谢您的反馈!我的帖子现在已被编辑。可能与