Enumerable.ThenByDescending Yöntem

Tanım

Bir dizideki öğelerin sonraki sıralamasını azalan düzende gerçekleştirir.

Aşırı Yüklemeler

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

Bir dizideki öğelerin sonraki sıralamasını bir anahtara göre azalan düzende gerçekleştirir.

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

Belirtilen karşılaştırıcıyı kullanarak bir dizideki öğelerin sonraki sıralamasını azalan düzende gerçekleştirir.

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

Kaynak:
OrderBy.cs
Kaynak:
OrderBy.cs
Kaynak:
OrderBy.cs

Bir dizideki öğelerin sonraki sıralamasını bir anahtara göre azalan düzende gerçekleştirir.

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)

Tür Parametreleri

TSource

öğelerinin sourcetürü.

TKey

tarafından keySelectordöndürülen anahtarın türü.

Parametreler

source
IOrderedEnumerable<TSource>

IOrderedEnumerable<TElement> Sıralanacak öğeleri içeren bir.

keySelector
Func<TSource,TKey>

Her öğeden bir anahtar ayıklama işlevi.

Döndürülenler

IOrderedEnumerable<TElement> Öğeleri bir anahtara göre azalan düzende sıralanan bir.

Özel durumlar

source veya keySelector şeklindedir null.

Açıklamalar

Bu yöntem ertelenmiş yürütme kullanılarak uygulanır. Hemen dönüş değeri, eylemi gerçekleştirmek için gereken tüm bilgileri depolayan bir nesnedir. Bu yöntemle temsil edilen sorgu, doğrudan yöntemini çağırarak GetEnumerator veya C# içinde veya For Each Visual Basic'te kullanarak foreach nesne numaralandırılana kadar yürütülür.

Bir diziyi öğelerin değerlerine göre sıralamak için keySelectoriçin identity işlevini (x => xC# dilinde veya Function(x) x Visual Basic'te) belirtin.

ThenBy ve ThenByDescending türünü genişletmek IOrderedEnumerable<TElement>için tanımlanır. Bu yöntemlerden dönüş türü de bu şekildedir. Bu tasarım, istediğiniz sayıda veya ThenByDescending yöntemi uygulayarak birden çok sıralama ölçütü belirtmenizi ThenBy sağlar.

Not

IOrderedEnumerable<TElement>' den IEnumerable<T>devralındığından , OrderByDescendingThenByThenByDescendingveya OrderByDescending çağrısının sonuçlarında veya öğesini OrderByçağırabilirsinizOrderBy. Bunu yapmak, önceden oluşturulmuş sıralamayı yoksayan yeni bir birincil sıralama sağlar.

Bu sıralama yöntemi, varsayılan karşılaştırıcıyı kullanarak anahtarları karşılaştırır Default.

Bu yöntem kararlı bir sıralama gerçekleştirir; diğer bir ifadeyle, iki öğe anahtarı eşitse, öğelerin sırası korunur. Buna karşılık, kararsız sıralama aynı anahtara sahip öğelerin sırasını korumaz.

C# sorgu ifadesi söz diziminde yan orderby [first criterion], [second criterion] descending tümcesi çağrısına ThenByDescendingdönüşür.

Visual Basic sorgu ifadesi söz diziminde yan Order By [first criterion], [second criterion] Descending tümcesi çağrısına ThenByDescendingdönüşür.

Ayrıca bkz.

Şunlara uygulanır

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

Kaynak:
OrderBy.cs
Kaynak:
OrderBy.cs
Kaynak:
OrderBy.cs

Belirtilen karşılaştırıcıyı kullanarak bir dizideki öğelerin sonraki sıralamasını azalan düzende gerçekleştirir.

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)

Tür Parametreleri

TSource

öğelerinin sourcetürü.

TKey

tarafından keySelectordöndürülen anahtarın türü.

Parametreler

source
IOrderedEnumerable<TSource>

IOrderedEnumerable<TElement> Sıralanacak öğeleri içeren bir.

keySelector
Func<TSource,TKey>

Her öğeden bir anahtar ayıklama işlevi.

comparer
IComparer<TKey>

Anahtarları karşılaştırmak için bir IComparer<T> .

Döndürülenler

IOrderedEnumerable<TElement> Öğeleri bir anahtara göre azalan düzende sıralanan bir.

Özel durumlar

source veya keySelector şeklindedir null.

Örnekler

Aşağıdaki kod örneği, özel bir karşılaştırıcı kullanarak bir dizideki öğelerin azalan sırada ikincil sıralamasını gerçekleştirmek için nasıl kullanılacağını ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>) gösterir.

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

Açıklamalar

Bu yöntem ertelenmiş yürütme kullanılarak uygulanır. Hemen dönüş değeri, eylemi gerçekleştirmek için gereken tüm bilgileri depolayan bir nesnedir. Bu yöntemle temsil edilen sorgu, doğrudan yöntemini çağırarak GetEnumerator veya C# içinde veya For Each Visual Basic'te kullanarak foreach nesne numaralandırılana kadar yürütülür.

Bir diziyi öğelerin değerlerine göre sıralamak için keySelectoriçin identity işlevini (x => xC# dilinde veya Function(x) x Visual Basic'te) belirtin.

ThenBy ve ThenByDescending türünü genişletmek IOrderedEnumerable<TElement>için tanımlanır. Bu yöntemlerden dönüş türü de bu şekildedir. Bu tasarım, istediğiniz sayıda veya ThenByDescending yöntemi uygulayarak birden çok sıralama ölçütü belirtmenizi ThenBy sağlar.

Not

IOrderedEnumerable<TElement>' den IEnumerable<T>devralındığından , OrderByDescendingThenByThenByDescendingveya OrderByDescending çağrısının sonuçlarında veya öğesini OrderByçağırabilirsinizOrderBy. Bunu yapmak, önceden oluşturulmuş sıralamayı yoksayan yeni bir birincil sıralama sağlar.

ise comparernull, anahtarları karşılaştırmak için varsayılan karşılaştırıcı Default kullanılır.

Bu yöntem kararlı bir sıralama gerçekleştirir; diğer bir ifadeyle, iki öğe anahtarı eşitse, öğelerin sırası korunur. Buna karşılık, kararsız sıralama aynı anahtara sahip öğelerin sırasını korumaz.

Şunlara uygulanır