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

依據索引鍵,按遞減順序執行序列中項目的後續排序作業。

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)

類型參數

TSource

source 項目的類型。

TKey

keySelector 所傳回之索引鍵的型別。

參數

source
IOrderedEnumerable<TSource>

包含要排序之項目的 IOrderedEnumerable<TElement>

keySelector
Func<TSource,TKey>

用來從各個項目擷取索引鍵的函式。

傳回

依據索引鍵按遞減順序排序其項目的 IOrderedEnumerable<TElement>

例外狀況

sourcekeySelectornull

備註

這個方法是使用延後執行來實作。 立即傳回值是一個物件,會儲存執行動作所需的所有資訊。 除非直接呼叫其 GetEnumerator 方法或在 C# 或 foreachFor Each Visual Basic 中使用 來列舉物件,否則不會執行這個方法所代表的查詢。

若要依元素本身的值排序序列,請在 C# 或 Visual Basic) 中指定識別函式 (x => xkeySelectorFunction(x) x

ThenByThenByDescending 會定義為擴充型 IOrderedEnumerable<TElement> 別 ,這也是這些方法的傳回型別。 此設計可讓您套用任意數目 ThenBy 的 或 ThenByDescending 方法,以指定多個排序準則。

注意

因為 IOrderedEnumerable<TElement> 繼承自 IEnumerable<T> ,所以您可以在呼叫 、 OrderByDescendingThenBy 或 的結果上呼叫 OrderByDescendingOrderByOrderBy 或 。 ThenByDescending 這麼做引進了忽略先前建立順序的新主要順序。

這個排序方法會使用預設比較子 Default 來比較索引鍵。

這個方法會執行穩定排序;也就是說,如果兩個元素的索引鍵相等,則會保留元素的順序。 相反地,不穩定的排序不會保留具有相同索引鍵的專案順序。

在 C# 查詢運算式語法中, orderby [first criterion], [second criterion] descending 子句會轉譯為 的 ThenByDescending 調用。

在 Visual Basic 查詢運算式語法中, Order By [first criterion], [second criterion] Descending 子句會轉譯為 的 ThenByDescending 調用。

另請參閱

適用於

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

來源:
OrderBy.cs
來源:
OrderBy.cs
來源:
OrderBy.cs

使用指定的比較子,依遞減順序執行序列中項目的後續排序作業。

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)

類型參數

TSource

source 項目的類型。

TKey

keySelector 所傳回之索引鍵的型別。

參數

source
IOrderedEnumerable<TSource>

包含要排序之項目的 IOrderedEnumerable<TElement>

keySelector
Func<TSource,TKey>

用來從各個項目擷取索引鍵的函式。

comparer
IComparer<TKey>

用來比較金鑰的 IComparer<T>

傳回

依據索引鍵按遞減順序排序其項目的 IOrderedEnumerable<TElement>

例外狀況

sourcekeySelectornull

範例

下列程式碼範例示範如何使用 ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>) 自訂比較子,以遞減循序執行序列中專案的次要順序。

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

備註

這個方法是使用延後執行來實作。 立即傳回值是一個物件,會儲存執行動作所需的所有資訊。 除非直接呼叫其 GetEnumerator 方法或在 C# 或 foreachFor Each Visual Basic 中使用 來列舉物件,否則不會執行這個方法所代表的查詢。

若要依元素本身的值排序序列,請在 C# 或 Visual Basic) 中指定識別函式 (x => xkeySelectorFunction(x) x

ThenByThenByDescending 會定義為擴充型 IOrderedEnumerable<TElement> 別 ,這也是這些方法的傳回型別。 此設計可讓您套用任意數目 ThenBy 的 或 ThenByDescending 方法,以指定多個排序準則。

注意

因為 IOrderedEnumerable<TElement> 繼承自 IEnumerable<T> ,所以您可以在呼叫 、 OrderByDescendingThenBy 或 的結果上呼叫 OrderByDescendingOrderByOrderBy 或 。 ThenByDescending 這麼做引進了忽略先前建立順序的新主要順序。

如果 為 comparernull ,則會使用預設比較子 Default 來比較索引鍵。

這個方法會執行穩定排序;也就是說,如果兩個元素的索引鍵相等,則會保留元素的順序。 相反地,不穩定的排序不會保留具有相同索引鍵的專案順序。

適用於