Как отсортировать массив по двум полям?

Для сортировки массива по двум полям в C# можно использовать метод Array.Sort(), указывая пользовательский компаратор.

Предположим, у нас есть класс Person с двумя полями - Name (строка) и Age (целое число). Нам нужно отсортировать массив типа Person[] по полю Name, а затем по полю Age.

Создадим класс Person:

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

Затем создадим массив объектов Person[] и заполним его:

Person[] people = new Person[]
{
    new Person { Name = "Alice", Age = 25 },
    new Person { Name = "Bob", Age = 30 },
    new Person { Name = "Alice", Age = 20 },
    new Person { Name = "Charlie", Age = 35 },
    new Person { Name = "Bob", Age = 25 }
};

Теперь, для сортировки по двум полям, создадим пользовательский компаратор с помощью класса Comparer<T>.Create(), передавая в него лямбда-выражение, которое будет сравнивать сначала по полю Name, а затем по полю Age:

Array.Sort(people, Comparer<Person>.Create((x, y) =>
{
    int result = x.Name.CompareTo(y.Name);
    if (result != 0)
        return result;
    else
        return x.Age.CompareTo(y.Age);
}));

После сортировки массив будет выглядеть следующим образом:

Alice 20
Alice 25
Bob 25
Bob 30
Charlie 35

В данном примере при сравнении объектов типа Person первоначально сравниваются по полю Name. Если они имеют одно и то же имя, тогда сравниваются по полю Age. Это гарантирует, что массив будет отсортирован сначала по полю Name, а затем по полю Age.