按降序排序大型双打列表

时间:2014-03-25 19:04:44

标签: c# list sorting

我有一个相当大的列表,包含数千个双打,我希望按降序排序。

xlist是我的双打名单。

我试过

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

xlist.OrderByDescending(d => d);

然后我继续使用for循环打印出列表的内容。这些都不奏效。我该怎么办?

5 个答案:

答案 0 :(得分:8)

您没有将已排序的列表分配给变量。你可能想要:

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 秒(如果您认为这是一个大型列表)。

答案 1 :(得分:3)

除了 Vlad 指出的内容之外,如果您想对列表进行排序,而不创建新列表,请尝试使用this overload of the Sort method

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

答案 2 :(得分:2)

替代方法是使用List.Sort方法,并使用以下降序比较器作为参数:

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

答案 3 :(得分:0)

你可以这样排序:

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

答案 4 :(得分:0)

您可以使用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)排序