我有一个清单:

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)但没有成功

最佳答案

如我所见,您要订购组(不是单个项目):

具有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

关于c# - 仅按Item2的List <Tuple <int,int >>排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58098567/

10-12 12:28