Sdílet prostřednictvím


Enumerable.ThenByDescending Metoda

Definice

Provede následné řazení prvků v sekvenci v sestupném pořadí.

Přetížení

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

Provede následné řazení prvků v sekvenci v sestupném pořadí podle klíče.

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

Provede následné řazení prvků v sekvenci v sestupném pořadí pomocí zadaného porovnávače.

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

Zdroj:
OrderBy.cs
Zdroj:
OrderBy.cs
Zdroj:
OrderBy.cs

Provede následné řazení prvků v sekvenci v sestupném pořadí podle klíče.

public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IOrderedEnumerable<TSource> ^ ThenByDescending(System::Linq::IOrderedEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector);
public static System.Linq.IOrderedEnumerable<TSource> ThenByDescending<TSource,TKey> (this System.Linq.IOrderedEnumerable<TSource> source, Func<TSource,TKey> keySelector);
static member ThenByDescending : System.Linq.IOrderedEnumerable<'Source> * Func<'Source, 'Key> -> System.Linq.IOrderedEnumerable<'Source>
<Extension()>
Public Function ThenByDescending(Of TSource, TKey) (source As IOrderedEnumerable(Of TSource), keySelector As Func(Of TSource, TKey)) As IOrderedEnumerable(Of TSource)

Parametry typu

TSource

Typ elementů .source

TKey

Typ klíče vráceného nástrojem keySelector.

Parametry

source
IOrderedEnumerable<TSource>

Objekt IOrderedEnumerable<TElement> obsahující prvky, které se mají seřadit.

keySelector
Func<TSource,TKey>

Funkce, která extrahuje klíč z každého prvku.

Návraty

Objekt IOrderedEnumerable<TElement> , jehož prvky jsou seřazeny sestupně podle klíče.

Výjimky

source nebo keySelector je null.

Poznámky

Tato metoda se implementuje pomocí odloženého spuštění. Okamžitá návratová hodnota je objekt, který ukládá všechny informace potřebné k provedení akce. Dotaz reprezentovaný touto metodou není proveden, dokud objekt není výčet buď voláním jeho GetEnumerator metody přímo, nebo pomocí foreach v jazyce C# nebo For Each v jazyce Visual Basic.

Pokud chcete pořadí pořadí podle hodnot samotných prvků, zadejte funkci identity (x => x v jazyce C# nebo Function(x) x Visual Basic) pro keySelector.

ThenBy a ThenByDescending jsou definovány pro rozšíření typu IOrderedEnumerable<TElement>, což je také návratový typ těchto metod. Tento návrh umožňuje zadat více kritérií řazení použitím libovolného ThenBy počtu metod nebo ThenByDescending .

Poznámka

Protože IOrderedEnumerable<TElement> dědí z IEnumerable<T>, můžete volat OrderBy nebo OrderByDescending na výsledky volání OrderBy, OrderByDescendingThenBy nebo ThenByDescending. Tím se zavede nové primární řazení, které ignoruje dříve vytvořené pořadí.

Tato metoda řazení porovnává klíče pomocí výchozího porovnávače Default.

Tato metoda provádí stabilní řazení; to znamená, že pokud jsou klíče dvou prvků stejné, pořadí prvků je zachováno. Naproti tomu nestabilní řazení nezachová pořadí prvků, které mají stejný klíč.

V syntaxi výrazu dotazu jazyka C# se orderby [first criterion], [second criterion] descending klauzule překládá na vyvolání výrazu ThenByDescending.

V syntaxi výrazu dotazu jazyka Visual Basic se Order By [first criterion], [second criterion] Descending klauzule překládá na vyvolání výrazu ThenByDescending.

Viz také

Platí pro

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

Zdroj:
OrderBy.cs
Zdroj:
OrderBy.cs
Zdroj:
OrderBy.cs

Provede následné řazení prvků v sekvenci v sestupném pořadí pomocí zadaného porovnávače.

public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IOrderedEnumerable<TSource> ^ ThenByDescending(System::Linq::IOrderedEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, System::Collections::Generic::IComparer<TKey> ^ comparer);
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);
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);
static member ThenByDescending : System.Linq.IOrderedEnumerable<'Source> * Func<'Source, 'Key> * System.Collections.Generic.IComparer<'Key> -> System.Linq.IOrderedEnumerable<'Source>
<Extension()>
Public Function ThenByDescending(Of TSource, TKey) (source As IOrderedEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), comparer As IComparer(Of TKey)) As IOrderedEnumerable(Of TSource)

Parametry typu

TSource

Typ elementů .source

TKey

Typ klíče vráceného nástrojem keySelector.

Parametry

source
IOrderedEnumerable<TSource>

Objekt IOrderedEnumerable<TElement> obsahující prvky, které se mají seřadit.

keySelector
Func<TSource,TKey>

Funkce, která extrahuje klíč z každého prvku.

comparer
IComparer<TKey>

An IComparer<T> pro porovnání klíčů.

Návraty

Objekt IOrderedEnumerable<TElement> , jehož prvky jsou seřazeny sestupně podle klíče.

Výjimky

source nebo keySelector je null.

Příklady

Následující příklad kódu ukazuje, jak pomocí ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>) vlastního porovnávače provést sekundární řazení prvků v sekvenci v sestupném pořadí.

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
*/
' This class provides a custom implementation of the Compare() method.
Class CaseInsensitiveComparer
    Implements IComparer(Of String)

    Function Compare(ByVal x As String, ByVal y As String) As Integer _
    Implements IComparer(Of String).Compare

        ' Compare values and ignore case.
        Return String.Compare(x, y, True)
    End Function
End Class

Sub ThenByDescendingEx1()
    Dim fruits() As String =
    {"apPLe", "baNanA", "apple", "APple", "orange", "BAnana", "ORANGE", "apPLE"}

    ' Sort the strings first by their length and then
    ' by using a custom "case insensitive" comparer.
    Dim query As IEnumerable(Of String) =
    fruits _
    .OrderBy(Function(fruit) fruit.Length) _
    .ThenByDescending(Function(fruit) fruit, New CaseInsensitiveComparer())

    ' Display the results.
    Dim output As New System.Text.StringBuilder
    For Each fruit As String In query
        output.AppendLine(fruit)
    Next
    Console.WriteLine(output.ToString())
End Sub

' This code produces the following output:

' apPLe
' apple
' APple
' apPLE
' orange
' ORANGE
' baNanA
' BAnana

Poznámky

Tato metoda se implementuje pomocí odloženého spuštění. Okamžitá návratová hodnota je objekt, který ukládá všechny informace potřebné k provedení akce. Dotaz reprezentovaný touto metodou není proveden, dokud objekt není výčet buď voláním jeho GetEnumerator metody přímo, nebo pomocí foreach v jazyce C# nebo For Each v jazyce Visual Basic.

Pokud chcete pořadí pořadí podle hodnot samotných prvků, zadejte funkci identity (x => x v jazyce C# nebo Function(x) x Visual Basic) pro keySelector.

ThenBy a ThenByDescending jsou definovány pro rozšíření typu IOrderedEnumerable<TElement>, což je také návratový typ těchto metod. Tento návrh umožňuje zadat více kritérií řazení použitím libovolného ThenBy počtu metod nebo ThenByDescending .

Poznámka

Protože IOrderedEnumerable<TElement> dědí z IEnumerable<T>, můžete volat OrderBy nebo OrderByDescending na výsledky volání OrderBy, OrderByDescendingThenBy nebo ThenByDescending. Tím se zavede nové primární řazení, které ignoruje dříve vytvořené pořadí.

Pokud comparer je null, použije se k porovnání klíčů výchozí porovnávače Default .

Tato metoda provádí stabilní řazení; to znamená, že pokud jsou klíče dvou prvků stejné, pořadí prvků je zachováno. Naproti tomu nestabilní řazení nezachová pořadí prvků, které mají stejný klíč.

Platí pro