Как принимать все элементы массива, кроме последнего элемента в С#
У меня есть строковый массив, подобный этому.
string[] queries
с данными более одной строки.
Я хочу пропустить последнюю строку из элемента и взять остальные. Я придумал
var remStrings = queries.Reverse().Skip(1).Take(queries.Length - 1);
Есть ли лучшая альтернатива этому?
Ответы
Ответ 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);