如何在Python和C#中按元组第二个元素排序列表

9 投票
2 回答
9653 浏览
提问于 2025-04-15 23:10

我有一个包含多个元组的列表,每个元组里有两个整数,我想按照第二个整数来排序。查了查Python的帮助文档,我找到了这个方法:

sorted(myList, key=lambda x: x[1])

这个方法很好。我的问题是,在C#(我必须使用的语言)中,有没有同样简洁的方法来做到这一点?我知道有个明显的办法,就是创建类并为整个比较步骤指定一个匿名委托,但也许还有基于LINQ的方式。提前感谢任何建议。

2 个回答

14

在Python中,还有另一种方法可以做到这一点。

from operator import itemgetter
sorted(myList, key=itemgetter(1))
6

假设这个元组的列表类型是 IEnumerable<Tuple<int, int>>(这是.NET 4.0中用 Tuple<..> 类表示的一系列元组),你可以使用LINQ扩展方法写出如下代码:

var result = myList.OrderBy(k => k.Item2);

在这段代码中,k.Item2 返回的是元组的第二个部分 - 在C#中,这是一种属性(因为通过索引访问元素在一般情况下不够安全)。除此之外,我觉得这段代码写得很简洁(这也得益于好用的lambda函数写法)。

如果使用LINQ的查询语法,你可以这样写(虽然我个人认为第一种写法更易读,而且确实更简洁):

var result = from k in myList orderby k.Item2 select k;

撰写回答