为了账号安全,请及时绑定邮箱和手机立即绑定

C#Sort和OrderBy比较

C#Sort和OrderBy比较

慕的地6264312 2019-10-29 13:14:48
我可以使用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);    }}
查看完整描述

3 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

不,它们不是相同的算法。对于初学者,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


此方法执行稳定的排序;也就是说,如果两个元素的键相等,则保留元素的顺序。相反,不稳定排序不会保留具有相同键的元素的顺序。分类; 也就是说,如果两个元素相等,则可能不会保留其顺序。相反,稳定排序保留了元素相等的顺序。


查看完整回答
反对 回复 2019-10-29
  • 3 回答
  • 0 关注
  • 1480 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信