我将如何按降序排序,List<Tuple<int, int>>
使用元组的第一个元素作为确定顺序的值?它必须是就地的,我只知道如何使用LINQ返回一个新列表.
Jon*_*eet 51
你只需要提供一个IComparer<Tuple<int, int>>
或一Comparison<Tuple<int, int>>
对List<T>.Sort
方法.后者可能更容易指定内联:
list.Sort((x, y) => y.Item1.CompareTo(x.Item1));
Run Code Online (Sandbox Code Playgroud)
如果你想按第一个值和第二个值排序,它会变得有点棘手,但仍然可行.例如:
list.Sort((x, y) => {
int result = y.Item1.CompareTo(x.Item1);
return result == 0 ? y.Item2.CompareTo(x.Item2) : result;
});
Run Code Online (Sandbox Code Playgroud)
编辑:我现在修改了上面的内容,按降序排序.请注意,要做到这一点,正确的方法是反向的比较顺序(y
以x
代替x
到y
).你不能只是否定返回值CompareTo
- 这将在CompareTo
返回时失败int.MinValue
.
aba*_*hev 12
为什么不呢?
List<Tuple<int, int>> list = ...
list = list.OrderBy(i => i.Item1).ToList();
Run Code Online (Sandbox Code Playgroud)
是的,它创建了一个新列表,但我只是感兴趣 - 为什么你不喜欢这个?
List<Tuple<int, int>> list = new List<Tuple<int, int>>
{
new Tuple<int,int>(1,1),
new Tuple<int,int>(0,2),
new Tuple<int,int>(3,0)
};
list.Sort(Comparer<Tuple<int, int>>.Default);
Run Code Online (Sandbox Code Playgroud)
生产:
0,2
1,1
3,0
Run Code Online (Sandbox Code Playgroud)
它是就地的,不是吗?
小智 7
现在你可以使用 lambda 来做到这一点:
list = list.OrderByDescending(x => x.Item1).ToList();
Run Code Online (Sandbox Code Playgroud)