C# 按列表排序<;元组<;int,int>&燃气轮机;仅限第2项

C# 按列表排序<;元组<;int,int>&燃气轮机;仅限第2项,c#,linq,sorting,C#,Linq,Sorting,我有一份清单: List<Tuple<int, int>> MyList = new List<Tuple<int, int>>(); 如何按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 尝试使用MyL

我有一份清单:

List<Tuple<int, int>> MyList = new List<Tuple<int, int>>();
如何按
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

所需的排序顺序是什么?该示例不按项目2排序。除非您的意思是
找到每个Item1的最大Item2值,否则按
max`value?对元组进行排序是完美的。这就是我需要的。谢谢你的回答和解释!
var result = MyList
  .GroupBy(item => item.Item1)                               // groups
  .OrderByDescending(group => group.Max(item => item.Item2)) // are ordered
  .SelectMany(group => group);                               // then expanded