Подтвердить что ты не робот

Как принимать все элементы массива, кроме последнего элемента в С#

У меня есть строковый массив, подобный этому.

string[] queries с данными более одной строки.

Я хочу пропустить последнюю строку из элемента и взять остальные. Я придумал

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

Есть ли лучшая альтернатива этому?

4b9b3361

Ответ 1

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

Нет необходимости переходить назад и пропустить. Просто возьмите один меньше элемента, чем в массиве.

Если вам действительно нужны элементы в обратном порядке, вы можете сделать привязку к .Reverse() до конца.

Ответ 2

Почему бы просто не иметь:

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

который вернет их в том же порядке.

Добавить .Reverse() для замены порядка, если это необходимо:

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

Ответ 3

Команда Microsoft Reactive Extensions имеет интерактивные расширения (NuGet "System.Interactive" ), которая позволяет вам сделать это:

var remStrings = queries.SkipLast(1);

Ответ 4

Этот ответ из связанного сообщения также стоит упомянуть, поскольку он элегантно относится к любому IEnumerable за один проход, без необходимости знать его количество элементов заранее.

Ответ 5

Отредактировано: Вы могли бы эффективно заменить массив с тем же массивом минус последний элемент со следующей строкой или кодом:

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

Если вы хотите создать метод, который сделает это за вас, вы можете использовать следующее:

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

И реализуйте его в своем коде так:

queries = TrimLastElement(queries);