按降序对大的双精度数列表进行排序

本文关键字:列表 排序 数列 双精度 降序 | 更新日期: 2023-09-27 17:53:05

我有一个相当大的列表,包含数千个双精度对象,我希望按降序对它进行排序。

xlist是我的双精度序列。

我试着

xlist.Sort();
xlist.Reverse();

xlist.OrderByDescending(d => d);

然后继续使用for循环输出列表的内容。这两种方法都行不通。我该怎么办?

按降序对大的双精度数列表进行排序

您没有将排序列表分配给变量。您可能需要:

xlist = xlist.OrderByDescending(d => d).ToList();

:

IList<double> list = new List<double>() { 10, 22, 71.2, 12.4, 1.78, 90.1, 107.33, 5.9 };
System.Diagnostics.Debug.WriteLine("Unsorted: " + string.Join(",", list)); 
list = list.OrderByDescending(d => d).ToList();
System.Diagnostics.Debug.WriteLine("Reverse Sorted: " + string.Join(",", list));

:

Unsorted: 10,22,71.2,12.4,1.78,90.1,107.33,5.9
Sorted: 107.33,90.1,71.2,22,12.4,10,5.9,1.78

性能: 0.41秒排序1,000,000随机双精度值(如果你认为这是一个大列表)

除了Vlad指出的,如果您想对列表进行就地排序,而不创建新列表,请尝试使用Sort方法的这个重载:

xlist.Sort((a, b) => Math.Sign(b - a));

另一种方法是使用以下降序比较器作为参数的List.Sort方法:

xlist.Sort((a, b) => b.CompareTo(a));

您可以这样排序:

var sortedList = from element in xlist
                 orderby element descending
                 select element;

您可以使用OrderByDescending(d =>d)在System.Linq下。上面的函数将返回一个新的列表实例,而不是对列表本身进行排序。所以你的最终代码应该是:

xlist = xlist.OrderByDescending(d => d).ToList();

现在,如果您的列表包含一个二维数组,您可以通过指定数组中所需的值对列表进行排序。例如:

double[] arr1 = {1, 2, 3};
double[] arr2 = {5, 6, 8};
List<double[]> Items = new List<double[]>();
Items.Add(arr1);
Items.Add(arr2);
Items = Items.OrderByDescending(d => d[2]).ToList();

列表将按照数组的第二个值(6和2)排序