猿问

C#Sort和OrderBy比较

我可以使用Sort或OrderBy对列表进行排序。哪一个更快?两者都在使用相同的算法吗?


List<Person> persons = new List<Person>();

persons.Add(new Person("P005", "Janson"));

persons.Add(new Person("P002", "Aravind"));

persons.Add(new Person("P007", "Kazhal"));

1。


persons.Sort((p1,p2)=>string.Compare(p1.Name,p2.Name,true));

2。


var query = persons.OrderBy(n => n.Name, new NameComparer());


class NameComparer : IComparer<string>

{

    public int Compare(string x,string y)

    {

      return  string.Compare(x, y, true);

    }

}


慕的地6264312
浏览 1481回答 3
3回答

一只斗牛犬

不,它们不是相同的算法。对于初学者,LINQ OrderBy被记录为稳定的(即,如果两个项目相同Name,则它们将以其原始顺序出现)。它还取决于您是否对查询进行缓冲还是对其进行多次迭代(除非对结果进行缓冲,否则LINQ-to-Objects将对per重新排序foreach)。对于OrderBy查询,我也很想使用:OrderBy(n => n.Name, StringComparer.{yourchoice}IgnoreCase);(对{yourchoice}之一CurrentCulture,Ordinal或InvariantCulture)。List<T>.Sort此方法使用Array.Sort,后者使用QuickSort算法。此实现执行不稳定的排序;也就是说,如果两个元素相等,则可能不会保留其顺序。相反,稳定排序保留了元素相等的顺序。Enumerable.OrderBy此方法执行稳定的排序;也就是说,如果两个元素的键相等,则保留元素的顺序。相反,不稳定排序不会保留具有相同键的元素的顺序。分类; 也就是说,如果两个元素相等,则可能不会保留其顺序。相反,稳定排序保留了元素相等的顺序。
随时随地看视频慕课网APP
我要回答