Заказать список> только по Item2 - PullRequest
2 голосов
/ 25 сентября 2019

У меня есть список:

List<Tuple<int, int>> MyList = new List<Tuple<int, int>>();

Значение списка приведено ниже:

int   int
0     2
0     1
0     4
1     2
1     3
1     0
2     0
2     9
2     1
3     2
3     5
3     2

Как мне отсортировать list по по высшему значение Item2 но сохранить порядок Item1?Как показано ниже:

int   int
2     0
2     9*
2     1
3     2
3     5*
3     2
0     2
0     1
0     4*
1     2
1     3*
1     0

Пытался использовать MyList.OrderBy(x => x.Item2), но безуспешно

1 Ответ

6 голосов
/ 25 сентября 2019

Как я вижу, вы хотите заказать группы (не отдельные элементы):

группа с Item1 == 2 стоит первой, так как эта группа имеет максимальное значение Item2 (9) среди всех других групп; группа с Item1 == 1 является последней, ее максимальное значение Item2 (3) является наименьшим среди других групп

2     0
2     9*
2     1
...
1     2
1     3*
1     0

На заказ групп давайте попробуем GroupBy:

var result = MyList
  .GroupBy(item => item.Item1)                               // groups
  .OrderByDescending(group => group.Max(item => item.Item2)) // are ordered
  .SelectMany(group => group);                               // then expanded
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...