[英]sorting a large list of doubles in descending order
我有一个由数千个双打组成的相当大的列表,我希望按降序对其进行排序。
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
性能:对1,000,000 个随机双精度值进行排序需要0.41秒(如果您认为这是一个大列表)。
除了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;
您可以使用 System.Linq 下的OrderByDescending(d => d)对列表进行排序。 上面的函数将返回一个新的列表实例,而不是对列表本身进行排序。 所以你的最终代码应该是:
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)排序
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.