Вы хотите элегантный и лаконичный, я дам вам элегантный и лаконичный:
var fifties = from index in Enumerable.Range(0, addresses.Length)
group addresses[index] by index/50;
foreach(var fifty in fifties)
Send(string.Join(";", fifty.ToArray());
Зачем возиться со всем этим ужасным цикличным кодом, когда это не нужно? Вы хотите сгруппировать вещи по пятидесятым, , а затем сгруппировать по пятидесятым.
Для этого и нужен групповой оператор!
ОБНОВЛЕНИЕ: комментатор MoreCoffee спрашивает, как это работает. Давайте предположим, что мы хотели сгруппировать по три, потому что это легче набирать.
var threes = from index in Enumerable.Range(0, addresses.Length)
group addresses[index] by index/3;
Предположим, что существует девять адресов, проиндексированных от нуля до восьми
Что означает этот запрос?
Enumerable.Range
- это диапазон из девяти чисел, начинающихся с нуля, поэтому 0, 1, 2, 3, 4, 5, 6, 7, 8
.
Переменная диапазона index
принимает каждое из этих значений по очереди.
Затем мы просматриваем каждый соответствующий addresses[index]
и назначаем его группе.
В какую группу мы его назначаем? К группе index/3
. Целочисленные арифметические округления до нуля в C #, поэтому индексы 0, 1 и 2 становятся 0 при делении на 3. Индексы 3, 4, 5 становятся 1, когда делятся на 3. Индексы 6, 7, 8 становятся 2.
Поэтому мы присваиваем addresses[0]
, addresses[1]
и addresses[2]
группе 0, addresses[3]
, addresses[4]
и addresses[5]
группе 1 и т. Д.
Результатом запроса является последовательность из трех групп, а каждая группа представляет собой последовательность из трех элементов.
Это имеет смысл?
Помните также, что результатом выражения запроса является запрос , представляющий эту операцию . не выполняет операцию до тех пор, пока не будет выполнен цикл foreach
.