C# Sort 与 OrderBy:性能和算法比较
简介
对集合进行排序时C# 中,开发人员有两个主要选项:Sort 和 OrderBy。虽然这两种方法达到相同的最终结果,但它们的底层算法和性能特征有所不同。
性能注意事项
与普遍看法相反,Sort 和 OrderBy 不使用相同的排序算法。排序采用快速排序算法,这是一种不稳定的排序,这意味着它可能无法保留具有相等值的元素的顺序。另一方面,OrderBy 使用稳定排序,确保具有相等值的元素保持其相对顺序。
因此,如果排序至关重要并且您需要保留原始序列,建议使用 OrderBy。但是,如果性能是重中之重,并且可以接受不稳定的情况,Sort 可能会提供更快的解决方案。
算法比较
List
Enumerable.OrderBy
示例实现
考虑以下代码,该代码对 Person 对象列表进行排序name:
// Using Sort List<Person> persons = new List<Person>(); ... persons.Sort((p1, p2) => string.Compare(p1.Name, p2.Name, true)); // Using OrderBy var query = persons.OrderBy(n => n.Name, new NameComparer());
对于OrderBy,我们定义一个自定义比较器(NameComparer)来指定比较条件。我们还可以利用预定义的比较器,例如 StringComparer.InvariantCultureIgnoreCase 进行不区分大小写的字符串比较。
结论
虽然 Sort 和 OrderBy 都提供了对集合进行排序的可行选项,它们的适用性取决于具体要求。如果顺序保存至关重要,则 OrderBy 更可取,尽管速度可能较慢。相反,对于可以容忍不稳定的性能密集型场景,Sort 可能会提供更快的解决方案。
以上是C# Sort 与 OrderBy:我应该何时使用哪个以获得最佳性能?的详细内容。更多信息请关注PHP中文网其他相关文章!