Работа с массивами в C#
❓Представим, что у нас есть какой-то список значений, который требуется дополнить одним элементом в начале и одним элементом в конце.
Сразу в голову приходит следующее:
// Начальная цена var veryFirstPrice = 10;
// Промежуточные цены var commonPrices = new List { 12, 55, 82 };
// Конечная цена var finalPrice = 89;
// Объявляем переменную для хранения всех цен var prices = new List();
// Теперь добавим все цены по порядку в наш список prices.Add(veryFirstPrice); prices.AddRange(commonPrices); prices.Add(finalPrice);
Тут сначала создаем пустую коллекцию, а потом последовательно добавляем в нее сначала значение в начало списка, потом перечень цен в середину, а потом еще одно значение - в конец.
❓А что, если хочется чего-то более лаконичного, в функциональном стиле, например? 🤫
В .NET есть возможность сделать так:
// Начальная цена var veryFirstPrice = 10;
// Промежуточные цены var commonPrices = new List { 12, 55, 82 };
// Конечная цена var finalPrice = 89;
// Добавим сразу один элемент в начало, в другой в конец списка промежуточных цен var prices = commonPrices.Prepend(veryFirstPrice).Append(finalPrice);
Получилось элегантней 🌟
Правда, Prepend и Append не изменяют исходную коллекцию, а возвращают новую.
Кроме этого эти методы имеют отложенное выполнение, соответственно, для работы с элементами результирующей последовательности, потребуется сделать так:
var priceItems = prices.ToList();
❗️Второй вариант не подойдет, если требуется экономить память и получить максимальную производительность в случае повторного обращения к элементам коллекции.
Хотите красоты функционального стиля, и вас вполне устраивает на выходе получить IEnumerable или List - второй вариант — то, что надо.