C# 如何对列表进行排序<;元组<;整数,双精度>&燃气轮机;

C# 如何对列表进行排序<;元组<;整数,双精度>&燃气轮机;,c#,list,sorting,C#,List,Sorting,您好,谢谢您阅读这篇文章 我有一个这样创建的列表 List<Tuple<int, double>> Ratings = new List<Tuple<int, double>>(); 如何对列表进行排序,使最高的双精度值位于顶部?像这样 Index int double [0] 3 5,0 [1] 1 4,5 [2] 2 2,5 [3]

您好,谢谢您阅读这篇文章

我有一个这样创建的列表

List<Tuple<int, double>> Ratings = new List<Tuple<int, double>>();
如何对列表进行排序,使最高的双精度值位于顶部?像这样

Index      int     double
[0]        3       5,0
[1]        1       4,5
[2]        2       2,5
[3]        4       1,0
你可以简单地使用

Ratings = Ratings.OrderByDescending (t => t.Item2).ToList();
如果您尝试过使用列表中的方法,intellisense应该向您推荐,这是很自然的:

Ratings.Sort((x, y) => y.Item2.CompareTo(x.Item2));
// at this stage the Ratings list will be sorted as desired
列表评级=新列表();
添加(新元组(1,4.5));
添加(新元组(4,1.0));
添加(新元组(3,5.0));
添加(新元组(2,2.5));
var list=Ratings.OrderByDescending(c=>c.Item2.ToList();
var comparer=comparer.Create((x,y)=>-1*x.Item2.CompareTo(y.Item2));
排序(比较器);

Ratings=Ratings.OrderByDescending(tuple=>tuple.Item2).ToList()
?如果可以创建新列表,只需使用
.OrderByDescending(x=>x.Item2.ToList()
。对于就地排序,可以使用
list.Sort((x,y)=>Comparer.Default.Compare(y.Item2,x.Item2))
乘以
-1
不是一个好主意,因为它不会改变
int.MinValue
的符号。这是for comparer的有效返回值,即使双比较器可能不返回该值。交换
x
y
List.Sort
有一个重载,它接受
比较
委托,无需构造比较器。您应该使用OrderByDescending()的返回值来处理
Ratings.Sort((x, y) => y.Item2.CompareTo(x.Item2));
// at this stage the Ratings list will be sorted as desired
Ratings.OrderByDescending(t => t.Item2);
List<Tuple<int, double>> Ratings = new List<Tuple<int, double>>();

                    Ratings.Add(new Tuple<int, double>(1, 4.5));
                    Ratings.Add(new Tuple<int, double>(4, 1.0));
                    Ratings.Add(new Tuple<int, double>(3, 5.0));
                    Ratings.Add(new Tuple<int, double>(2, 2.5));

                    var list = Ratings.OrderByDescending(c => c.Item2).ToList();
var comparer = Comparer<Tuple<int, double>>.Create((x, y) => -1 * x.Item2.CompareTo(y.Item2));
Ratings.Sort(comparer);