我有一个像这样的字符串数组。
string[] queries
,数据多个字符串。
我想跳过元素中的最后一个字符串并取剩余的字符串。我想出了
var remStrings = queries.Reverse().Skip(1).Take(queries.Length - 1);
还有更好的选择吗?
答案 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]
这可以通过将0
和1
转换为索引(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);