首页 >后端开发 >C++ >C# 排序:排序与 OrderBy:我什么时候应该使用哪个?

C# 排序:排序与 OrderBy:我什么时候应该使用哪个?

Barbara Streisand
Barbara Streisand原创
2024-12-30 02:05:091004浏览

C# Sorting: Sort vs. OrderBy: When Should I Use Which?

C# 排序:Sort 与 OrderBy

在 C# 中,我们有多种对集合进行排序的选项,包括 Sort 和 OrderBy。本文将深入探讨这两种方法及其各自算法之间的差异。

排序

Sort 方法使用 QuickSort 算法执行就地排序。这是一种不稳定的排序算法,意味着排序后可能无法保留相等元素的顺序。

OrderBy

OrderBy 方法则执行稳定排序。这意味着相等的元素在排序后保持其相对顺序。 OrderBy 内部使用了归并排序算法。

性能对比

Sort 和 OrderBy 的性能因集合大小、元素类型等因素而异,以及排序标准。一般来说,对于小型集合或按原始数据类型排序时,排序速度更快。然而,对于较大的集合或复杂的排序条件,OrderBy 因其稳定的排序算法可以更加高效。

使用场景

排序适合需要执行的情况就地排序,不需要保留相等元素的顺序。当保留相等元素的顺序很重要或者当您需要在排序后执行其他操作(例如过滤或投影)时,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"));

使用Sort,我们可以对列表进行排序name:

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

使用 OrderBy,我们可以使用自定义比较器执行稳定排序:

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);
    }
}

在这个例子中,OrderBy 更合适,因为它确保相等的顺序名称被保留。

以上是C# 排序:排序与 OrderBy:我什么时候应该使用哪个?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn