对列表<Tuple >进行排序

我将如何使用元组的第一个元素作为确定顺序的值,按降序排序,使用List<Tuple>进行排序? 它必须是就地的,我只知道如何使用LINQ返回一个新列表。

您只需要向List.Sort方法提供IComparer>Comparison> 。 后者可能更容易指定内联:

 list.Sort((x, y) => y.Item1.CompareTo(x.Item1)); 

如果你想按第一个值和第二个值排序,它会变得有点棘手,但仍然可行。 例如:

 list.Sort((x, y) => { int result = y.Item1.CompareTo(x.Item1); return result == 0 ? y.Item2.CompareTo(x.Item2) : result; }); 

编辑:我现在修改了上面的内容,按降序排序。 请注意,正确的方法是颠倒比较的顺序( yx而不是xy )。 你不能只是否定CompareTo的返回值 – 当CompareTo返回int.MinValue时,这将失败。

为什么不呢?

 List> list = ... list = list.OrderBy(i => i.Item1).ToList(); 

是的,它创建了一个新列表,但我只是感兴趣 – 为什么你不喜欢这个?


 List> list = new List> { new Tuple(1,1), new Tuple(0,2), new Tuple(3,0) }; list.Sort(Comparer>.Default); 

生产:

 0,2 1,1 3,0 

它是就地的,不是吗?

你看过List.Sort方法了吗? 您可以使用带有Comparison委托或IComparer的重载:

 list.Sort((x,y)=> x.Item1.CompareTo(y.Item1)); 
 var listSort = from element in list orderby element.Item1 element.Item2 select element;