如何对通用列表DESC和ASC进行排序?

时间:2010-06-17 14:24:17

标签: c# .net linq

如何对通用列表DESC和ASC进行排序?使用LINQ而不使用LINQ?我正在使用VS2008。

class Program
{
    static void Main(string[] args)
    {
        List<int> li = new List<int>();

        li.Add(456);
        li.Add(123);
        li.Add(12345667);
        li.Add(0);
        li.Add(1);

        li.Sort();

        foreach (int item in li)
        {
            Console.WriteLine(item.ToString() + "\n");
        }

        Console.ReadKey();
    }
}

5 个答案:

答案 0 :(得分:197)

使用Linq

var ascendingOrder = li.OrderBy(i => i);
var descendingOrder = li.OrderByDescending(i => i);

没有Linq

li.Sort((a, b) => a.CompareTo(b)); // ascending sort
li.Sort((a, b) => -1* a.CompareTo(b)); // descending sort

请注意,如果没有Linq,列表本身就会被排序。使用Linq,您将获得列表的有序枚举,但列表本身并未更改。如果要改变列表,可以将Linq方法更改为

li = li.OrderBy(i => i).ToList();

答案 1 :(得分:62)

没有Linq:

升序:

li.Sort();

降序:

li.Sort();
li.Reverse();

答案 2 :(得分:18)

没有linq, 使用Sort()然后Reverse()

答案 3 :(得分:4)

我正在检查以上所有答案,并想添加一个附加信息。 我想按DESC顺序对列表进行排序,我正在寻找对于较大输入而言更快的解决方案,并且我之前使用的是这种方法:-

li.Sort();
li.Reverse();

但是我的测试用例未能超过时间限制,因此以下解决方案对我有效:-

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

所以最终得出的结论是,以降序对列表进行排序的第二种方法比上一种更快。

答案 4 :(得分:-3)

使用降序对int值进行排序的非常简单的方法:

li.Sort((a,b)=> b-a);

希望这有帮助!