У меня есть коллекция, где предметы не заказаны. Каждый элемент имеет 2 свойства: одно используется для их группировки, а другое - для упорядочения их в этой группе. И мне нужно создать коллекцию, где элементы упорядочиваются внутри групп, но порядок групп не меняется.
К примеру, это ввод:
(12, 0), (44, 0), (22, 1), (100, 0), (1, 0), (22, 3), (22, 2)
Как получить этот (ниже) вывод?
(12,0), (44,0), (22,1), (22,2), (22,3), (100,0), (1,0)
Обратите внимание на элементы группы 22
: они перемещены вместе туда, где группа появляется первой, и упорядочены между собой.
Вот репродукция (с использованием кортежей C # 7.0, не забудьте нацелиться на 4.7 framework в VS2017):
(int A, int B)[] input = new[] { (12, 0), (44, 0), (22, 1), (100, 0), (1, 0), (22, 3), (22, 2) };
var output = input.OrderBy(o => o.A).ThenBy(o => o.B).ToArray();
//var output = input.Select((o, i) => new { Index = i, Item = o }).GroupBy(o => o.Item.A)...SelectMany().ToArray();
Console.WriteLine(string.Join(", ", output.Select(o => $"({o.A}, {o.B})")));
Некомментированная часть также сортирует группы, производя неправильный вывод. А потом я спотыкаюсь (комментируемая часть) с индексами, группированием, выравниванием ... это не может быть так сложно или должно быть?