我可以使用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
此方法执行稳定的排序;也就是说,如果两个元素的键相等,则保留元素的顺序。相反,不稳定排序不会保留具有相同键的元素的顺序。分类; 也就是说,如果两个元素相等,则可能不会保留其顺序。相反,稳定排序保留了元素相等的顺序。
添加回答
举报
0/150
提交
取消