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

9

我有一个由两个整数组成的元组列表,我想按第二个整数进行排序。在查看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;

@Damian:这在C# 3.0中也可以工作,但您需要实现自己的Tuple<T1, T2>(它只是一个具有两个泛型类型属性T1 Item1 { get; set; }T2 Item2 { get; set; }的简单类)。 - Tomas Petricek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接