📜  c# list object sort 按字母顺序 - C# (1)

📅  最后修改于: 2023-12-03 14:59:40.350000             🧑  作者: Mango

C# List Object Sort 按字母顺序

在C#编程中,排序是一个经常需要完成的任务。List 类是 C# 语言中最常用的集合之一,提供了方便的方法,如Add、Remove、Contains、IndexOf、Count等。通过使用 List,您可以保存和操作元素的列表,因此,为了更好的处理该列表,我们需要对其进行排序。

本文将向您介绍如何使用C#中的 List 类进行字母顺序排序。

排序方法

C#中 List 提供了 Sort() 方法,该方法可以对元素进行升序排序。但是,默认情况下,Sort() 方法会根据元素的类型进行排序,例如,数字按从小到大排序,字符串按字母表顺序排序。

List<string> list = new List<string>() { "apple", "orange", "banana", "pear" };
list.Sort();

在此示例中,List 类型的列表按字母表顺序排序后,元素的顺序为:"apple", "banana", "orange", "pear"。

但是,如果列表中的元素不是字符串类型,则需要实现 IComparer 或 Comparison 接口来定义元素的排序规则。

自定义排序规则

如果您要对列表中的对象进行排序,则需要实现 IComparable 或 IComparer 接口,这样就能够对整个对象按您自定义的排序规则进行排序。

IComparable

IComparable 接口定义了一个 CompareTo(T other) 方法,该方法返回一个整数,表示当前对象应排在参数对象的前面、后面还是相同。例如,如果您要按对象的属性进行排序,则可以这样实现:

public class Person : IComparable<Person>
{
    public string Name { get; set; }
    public int Age { get; set; }

    public int CompareTo(Person other)
    {
        return Name.CompareTo(other.Name);
    }
}

在此示例中,Person 类实现了 IComparable 接口,CompareTo() 方法会按照 Name 属性的字母表顺序对 Person 对象进行排序。

您可以使用以下代码对 Person 对象列表进行排序:

List<Person> list = new List<Person>() { new Person { Name = "Alice", Age = 20 },
                                         new Person { Name = "Bob", Age = 30 },
                                         new Person { Name = "Charlie", Age = 25 } };
list.Sort();

在此示例中,Person 对象列表按 Name 属性的字母表顺序排序后,元素的顺序为:Alice, Bob, Charlie。

IComparer

如果您需要在不改变对象定义的情况下对对象进行排序,则应使其实现 IComparer 接口。IComparer 接口定义了一个 Compare(T x, T y) 方法,该方法将比较两个对象,并指示它们的顺序。

例如,如果您想对列表中的 Person 对象按 Age 属性进行排序,则可以这样实现:

public class PersonAgeComparer : IComparer<Person>
{
    public int Compare(Person x, Person y)
    {
        return x.Age.CompareTo(y.Age);
    }
}

在此示例中,PersonAgeComparer 类实现了 IComparer 接口,Compare() 方法会比较两个 Person 对象的 Age 属性,并指示它们的顺序。

您可以使用以下代码对 Person 对象列表进行排序:

List<Person> list = new List<Person>() { new Person { Name = "Alice", Age = 20 },
                                         new Person { Name = "Bob", Age = 30 },
                                         new Person { Name = "Charlie", Age = 25 } };
list.Sort(new PersonAgeComparer());

在此示例中,Person 对象列表按 Age 属性的大小排序后,元素的顺序为:Alice, Charlie, Bob。

小结

C#中的 List 类提供了 Sort() 方法,该方法可以按默认规则对元素进行排序。如果需要按自定义规则对元素进行排序,则需要实现 IComparable 或 IComparer 接口。

实现 IComparable 接口允许您按当前类的某个属性对对象进行排序,而实现 IComparer 接口允许您在不改变对象定义的情况下对对象进行排序。

以上是关于C# List Object Sort 按字母顺序的介绍,希望能够帮助您在C#编程中进行列表排序。