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

Pen*_*uen 101 .net c# 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Ant*_*ram 215

有了Linq

var ascendingOrder = li.OrderBy(i => i);
var descendingOrder = li.OrderByDescending(i => i);
Run Code Online (Sandbox Code Playgroud)

没有Linq

li.Sort((a, b) => a.CompareTo(b)); // ascending sort
li.Sort((a, b) => -1* a.CompareTo(b)); // descending sort
Run Code Online (Sandbox Code Playgroud)

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

li = li.OrderBy(i => i).ToList();
Run Code Online (Sandbox Code Playgroud)

  • 我认为对于降序,使用`li.Sort((a,b)=> b.CompareTo(a));`比使用这里使用的`-1*`方法要清楚得多.我相应地编辑了答案但是@Servy还原了它. (23认同)
  • @onedaywhen当作者在写出他们想要的内容时犯了一个错误,将其改为他们打算写的是好的.更改代码形式是其他人认为解决方案应该是使用您认为应该使用的不同方法而不是适当的编辑. (7认同)
  • @onedaywhen当然; 你会看到编辑描述的任何地方都会看到它.在帮助中心,"我应该何时编辑帖子?[...]澄清帖子的含义(不改变其含义)" (5认同)
  • 或者只是`-a.CompareTo(b)`. (4认同)
  • @onedaywhen 如果您认为其他用户的答案不正确,您应该发表评论、投票和/或提供您认为正确的答案,而不是将其他人的答案编辑为您认为正确的答案。 (2认同)

San*_*nen 65

没有Linq:

上升:

li.Sort();
Run Code Online (Sandbox Code Playgroud)

降:

li.Sort();
li.Reverse();
Run Code Online (Sandbox Code Playgroud)

  • `Sort()` 是一个 void 方法,因此您不能以这种方式将 `Reverse()` 链接到它。您将需要 2 个单独的操作。但是,使用 LINQ,您可以将其链接到“OrderBy”,但此时您应该只使用“OrderByDescending”。 (3认同)

Sri*_*thy 18

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


sar*_*eek 6

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

li.Sort();
li.Reverse();
Run Code Online (Sandbox Code Playgroud)

但是我的测试用例因超出时间限制而失败,因此以下解决方案对我有用:-

li.Sort((a, b) => b.CompareTo(a));
Run Code Online (Sandbox Code Playgroud)

所以最终的结论是,按降序排列列表的第二种方式比前一种快一点。