📌  相关文章
📜  如何在 C# 中按特定属性对对象数组进行排序?(1)

📅  最后修改于: 2023-12-03 15:38:13.604000             🧑  作者: Mango

如何在 C# 中按特定属性对对象数组进行排序?

在 C# 中,我们可以使用 Array.Sort()List.Sort() 方法对对象数组进行排序。这些方法可以使用 Lambda 表达式或实现 IComparer<T> 接口来指定排序时所用的比较逻辑。

对于按特定属性排序的需求,我们可以通过实现 IComparer<T> 接口,或通过 Lambda 表达式来指定比较逻辑。

以下是一些示例代码,以便更好地理解如何在 C# 中按特定属性对对象数组进行排序:

使用实现 IComparer<T> 接口的方式

实现 IComparer<T> 接口是最基本的方式,通过实现 Compare() 方法来指定两个对象之间的排序规则。

using System;
using System.Collections.Generic;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public int Height { get; set; }
}

public class PersonComparer : IComparer<Person>
{
    /* 按照 Age 属性升序排序 */
    public int Compare(Person x, Person y)
    {
        return x.Age.CompareTo(y.Age);
    }
}

public static void Main()
{
    var persons = new List<Person>()
    {
        new Person { Name = "Alice", Age = 25, Height = 165 },
        new Person { Name = "Bob", Age = 30, Height = 175 },
        new Person { Name = "Cindy", Age = 22, Height = 160 }
    };

    /* 按照 Age 属性升序排序 */
    persons.Sort(new PersonComparer());
}
使用 Lambda 表达式的方式

使用 Lambda 表达式来排序,可以更加简洁方便地指定比较逻辑。

using System;
using System.Collections.Generic;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public int Height { get; set; }
}

public static void Main()
{
    var persons = new List<Person>()
    {
        new Person { Name = "Alice", Age = 25, Height = 165 },
        new Person { Name = "Bob", Age = 30, Height = 175 },
        new Person { Name = "Cindy", Age = 22, Height = 160 }
    };

    /* 按照 Age 属性升序排序 */
    persons.Sort((x, y) => x.Age.CompareTo(y.Age));
}

除了按照单个属性排序之外,还可以使用 LINQ 的 OrderBy() 方法进行多重排序,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public int Height { get; set; }
}

public static void Main()
{
    var persons = new List<Person>()
    {
        new Person { Name = "Alice", Age = 25, Height = 165 },
        new Person { Name = "Bob", Age = 30, Height = 175 },
        new Person { Name = "Cindy", Age = 22, Height = 160 }
    };

    /* 先按照 Age 属性升序排序,再按照 Height 属性降序排序 */
    persons = persons.OrderBy(p => p.Age).ThenByDescending(p => p.Height).ToList();
}

以上就是在 C# 中按特定属性对对象数组进行排序的一些方法与技巧。希望能对大家有所帮助。