how to take all array elements except last element in C#

后端 未结 6 810
滥情空心
滥情空心 2020-12-14 14:50

I have a string array like this.

string[] queries with data more than one string.

I want to skip the last string from the element and take the r

相关标签:
6条回答
  • 2020-12-14 14:56

    Why not just have:

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

    Which will return them in the same order.

    Append .Reverse() to swap the order if that's a necessary requirement:

    var remStrings = queries.Take(queries.Length-1).Reverse();
    
    0 讨论(0)
  • 2020-12-14 15:02

    This answer from a related post is also worth mentioning as it elegantly applies to any IEnumerable in a single pass, without the need to know its number of elements beforehand.

    0 讨论(0)
  • 2020-12-14 15:04

    Edited: You could effectively replace your array with the same array minus the last element with the following line or code:

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

    If you would like to create a method that does this for you, then you could use the following:

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

    And implement it in your code like so:

    queries = TrimLastElement(queries);
    
    0 讨论(0)
  • 2020-12-14 15:11

    For anyone finding this now...

    With the upcoming support for ranges and indices C# 8 and .NET Core 3.0 you can simply write

    var remStrings = queries[..^1]
    

    This is short for

    var remStrings = queries[0..^1]
    

    This works by converting the 0 and 1 to indices (System.Index), with the ^ being the marker (actually an operator) to index from the end of a sequence. From these indices a range (System.Range) is then generates which can then be used to access the array. (See https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8#indices-and-ranges)

    Currently this only works in the preview version of .NET Core 3.0

    0 讨论(0)
  • 2020-12-14 15:12

    Microsoft's Reactive Extensions' Team has the Interactive Extensions (NuGet "System.Interactive") that lets you do this:

    var remStrings = queries.SkipLast(1);
    
    0 讨论(0)
  • 2020-12-14 15:17
    var remStrings = queries.Take(queries.Length - 1);
    

    No need to Reverse and Skip. Just take one less element than there are in the array.

    If you really wanted the elements in the reverse order, you could tack on a .Reverse() to the end.

    0 讨论(0)
提交回复
热议问题