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