Прочитать на английском

Поделиться через


Enumerable.ThenByDescending Метод

Определение

Выполняет дополнительное упорядочение элементов последовательности в порядке убывания.

Перегрузки

ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>)

Выполняет дополнительное упорядочение элементов последовательности в порядке убывания ключа.

ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)

Выполняет дополнительное упорядочение элементов последовательности в порядке убывания с использованием указанного компаратора.

ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>)

Исходный код:
OrderBy.cs
Исходный код:
OrderBy.cs
Исходный код:
OrderBy.cs

Выполняет дополнительное упорядочение элементов последовательности в порядке убывания ключа.

C#
public static System.Linq.IOrderedEnumerable<TSource> ThenByDescending<TSource,TKey> (this System.Linq.IOrderedEnumerable<TSource> source, Func<TSource,TKey> keySelector);

Параметры типа

TSource

Тип элементов source.

TKey

Тип ключа, возвращаемого функцией keySelector.

Параметры

source
IOrderedEnumerable<TSource>

Объект IOrderedEnumerable<TElement>, содержащий сортируемые элементы.

keySelector
Func<TSource,TKey>

Функция, извлекающая ключ из каждого элемента.

Возвращаемое значение

Объект IOrderedEnumerable<TElement>, элементы которого отсортированы по ключу в порядке убывания.

Исключения

Параметр source или keySelector имеет значение null.

Комментарии

Этот метод реализуется с помощью отложенного выполнения. Немедленное возвращаемое значение — это объект, в котором хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется, пока объект не будет перечислен либо путем вызова его GetEnumerator метода напрямую, либо с помощью foreach в C# или For Each в Visual Basic.

Чтобы упорядочить последовательность по значениям самих элементов, укажите функцию identity (x => x в C# или Function(x) x в Visual Basic) для keySelector.

ThenBy и ThenByDescending определяются для расширения типа IOrderedEnumerable<TElement>, который также является типом возвращаемого значения этих методов. Такая конструкция позволяет указать несколько критериев сортировки, применяя любое количество ThenBy методов или ThenByDescending .

Примечание

Так как IOrderedEnumerable<TElement> наследует от IEnumerable<T>, можно вызвать OrderBy или OrderByDescending в результатах вызова OrderBy, OrderByDescendingThenBy или ThenByDescending. Это приведет к поведению нового первичного порядка, который игнорирует ранее установленный порядок.

Этот метод сортировки сравнивает ключи с помощью компаратора Defaultпо умолчанию .

Этот метод выполняет стабильную сортировку; то есть, если ключи двух элементов равны, порядок элементов сохраняется. В отличие от этого, нестабильная сортировка не сохраняет порядок элементов с одинаковым ключом.

В синтаксисе orderby [first criterion], [second criterion] descending выражения запроса C# предложение преобразуется в вызов ThenByDescending.

В синтаксисе Order By [first criterion], [second criterion] Descending выражения запроса Visual Basic предложение преобразуется в вызов ThenByDescending.

См. также раздел

Применяется к

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)

Исходный код:
OrderBy.cs
Исходный код:
OrderBy.cs
Исходный код:
OrderBy.cs

Выполняет дополнительное упорядочение элементов последовательности в порядке убывания с использованием указанного компаратора.

C#
public static System.Linq.IOrderedEnumerable<TSource> ThenByDescending<TSource,TKey> (this System.Linq.IOrderedEnumerable<TSource> source, Func<TSource,TKey> keySelector, System.Collections.Generic.IComparer<TKey> comparer);
C#
public static System.Linq.IOrderedEnumerable<TSource> ThenByDescending<TSource,TKey> (this System.Linq.IOrderedEnumerable<TSource> source, Func<TSource,TKey> keySelector, System.Collections.Generic.IComparer<TKey>? comparer);

Параметры типа

TSource

Тип элементов source.

TKey

Тип ключа, возвращаемого функцией keySelector.

Параметры

source
IOrderedEnumerable<TSource>

Объект IOrderedEnumerable<TElement>, содержащий сортируемые элементы.

keySelector
Func<TSource,TKey>

Функция, извлекающая ключ из каждого элемента.

comparer
IComparer<TKey>

Компаратор IComparer<T>, используемый для сравнения ключей.

Возвращаемое значение

Объект IOrderedEnumerable<TElement>, элементы которого отсортированы по ключу в порядке убывания.

Исключения

Параметр source или keySelector имеет значение null.

Примеры

В следующем примере кода показано, как использовать ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>) для выполнения дополнительного упорядочения элементов в последовательности в порядке убывания с помощью пользовательского средства сравнения.

C#
public class CaseInsensitiveComparer : IComparer<string>
{
    public int Compare(string x, string y)
    {
        return string.Compare(x, y, true);
    }
}

public static void ThenByDescendingEx1()
{
    string[] fruits = { "apPLe", "baNanA", "apple", "APple", "orange", "BAnana", "ORANGE", "apPLE" };

    // Sort the strings first ascending by their length and
    // then descending using a custom case insensitive comparer.
    IEnumerable<string> query =
        fruits
        .OrderBy(fruit => fruit.Length)
        .ThenByDescending(fruit => fruit, new CaseInsensitiveComparer());

    foreach (string fruit in query)
    {
        Console.WriteLine(fruit);
    }
}

/*
    This code produces the following output:

    apPLe
    apple
    APple
    apPLE
    orange
    ORANGE
    baNanA
    BAnana
*/

Комментарии

Этот метод реализуется с помощью отложенного выполнения. Немедленное возвращаемое значение — это объект, в котором хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется, пока объект не будет перечислен либо путем вызова его GetEnumerator метода напрямую, либо с помощью foreach в C# или For Each в Visual Basic.

Чтобы упорядочить последовательность по значениям самих элементов, укажите функцию identity (x => x в C# или Function(x) x в Visual Basic) для keySelector.

ThenBy и ThenByDescending определяются для расширения типа IOrderedEnumerable<TElement>, который также является типом возвращаемого значения этих методов. Такая конструкция позволяет указать несколько критериев сортировки, применяя любое количество ThenBy методов или ThenByDescending .

Примечание

Так как IOrderedEnumerable<TElement> наследует от IEnumerable<T>, можно вызвать OrderBy или OrderByDescending в результатах вызова OrderBy, OrderByDescendingThenBy или ThenByDescending. Это приведет к поведению нового первичного порядка, который игнорирует ранее установленный порядок.

Если comparer имеет значение null, для сравнения ключей используется средство сравнения Default по умолчанию.

Этот метод выполняет стабильную сортировку; то есть, если ключи двух элементов равны, порядок элементов сохраняется. В отличие от этого, нестабильная сортировка не сохраняет порядок элементов с одинаковым ключом.

Применяется к

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0