匯出 (0) 列印
全部展開
本文章是由機器翻譯。 將指標移到文章內的文字上方即可查看原文。 其他資訊。
譯文
原文

Enumerable.OrderByDescending<TSource, TKey> 方法 (IEnumerable<TSource>, Func<TSource, TKey>, IComparer<TKey>)

使用指定的比較子,依遞減順序排序序列中的項目。

命名空間:  System.Linq
組件:  System.Core (在 System.Core.dll 中)

public static IOrderedEnumerable<TSource> OrderByDescending<TSource, TKey>(
	this IEnumerable<TSource> source,
	Func<TSource, TKey> keySelector,
	IComparer<TKey> comparer
)

類型參數

TSource

source 之項目的型別。

TKey

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

參數

source
類型:System.Collections.Generic.IEnumerable<TSource>
要排序的值序列。
keySelector
類型:System.Func<TSource, TKey>
用來從項目擷取索引鍵的函式。
comparer
類型:System.Collections.Generic.IComparer<TKey>
用來比較索引鍵的 IComparer<T>

傳回值

類型:System.Linq.IOrderedEnumerable<TSource>
依據索引鍵按遞減順序排序其項目的 IOrderedEnumerable<TElement>

使用注意事項

在 Visual Basic 和 C# 中,您可以在任何 IEnumerable<TSource> 類型物件中呼叫這個方法以做為執行個體。使用執行個體方法語法呼叫這個方法時,請省略第一個參數。如需詳細資訊,請參閱擴充方法 (Visual Basic)擴充方法 (C# 程式設計手冊)

例外狀況條件
ArgumentNullException

sourcekeySelectornull

這個方法是利用延遲執行所實作。 立即傳回值是一個物件,儲存執行該動作所需的所有資訊。 這個方法所代表的查詢必須等到列舉物件 (透過直接呼叫其 GetEnumerator 方法,或是使用 Visual C# 中的 foreach 或 Visual Basic 中的 For Each) 之後才會執行。

若要按照項目的值將序列排序,請指定 keySelector 的識別函式 (在 Visual C# 中為 x => x,在 Visual Basic 中為 Function(x) x)。

目前我們定義了兩個方法來擴充型別 IOrderedEnumerable<TElement>,也就是這個方法的傳回型別。 這兩種方法,也就是 ThenByThenByDescending,可讓您指定額外的排序準則以排序順序。 ThenByThenByDescending 也傳回 IOrderedEnumerable<TElement>,這表示可以進行任何次數的連續呼叫 ThenBy 或者 ThenByDescending

注意事項注意事項

因為 IOrderedEnumerable<TElement> 繼承自 IEnumerable<T>,所以您可以針對 OrderByOrderByDescendingThenByThenByDescending 的呼叫結果,呼叫 OrderByOrderByDescending 這種做法可以引入新的主要排序,並忽略先前建立的排序。

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

這個方法會執行穩定的排序,也就是說,如果兩個項目的索引鍵相等,就會保留項目的順序。 相反地,不穩定的排序並不會保留具有相同索引鍵之項目的排序。

下列程式碼範例示範如何使用 OrderByDescending<TSource, TKey>(IEnumerable<TSource>, Func<TSource, TKey>, IComparer<TKey>),以利用轉換函式和自訂比較子,依遞減順序排序序列中的項目。


            /// <summary>
            /// This IComparer class sorts by the fractional part of the decimal number.
            /// </summary>
            public class SpecialComparer : IComparer<decimal>
            {
                /// <summary>
                /// Compare two decimal numbers by their fractional parts.
                /// </summary>
                /// <param name="d1">The first decimal to compare.</param>
                /// <param name="d2">The second decimal to compare.</param>
                /// <returns>1 if the first decimal's fractional part 
                /// is greater than the second decimal's fractional part,
                /// -1 if the first decimal's fractional
                /// part is less than the second decimal's fractional part,
                /// or the result of calling Decimal.Compare()
                /// if the fractional parts are equal.</returns>
                public int Compare(decimal d1, decimal d2)
                {
                    decimal fractional1, fractional2;

                    // Get the fractional part of the first number.
                    try
                    {
                        fractional1 = decimal.Remainder(d1, decimal.Floor(d1));
                    }
                    catch (DivideByZeroException)
                    {
                        fractional1 = d1;
                    }
                    // Get the fractional part of the second number.
                    try
                    {
                        fractional2 = decimal.Remainder(d2, decimal.Floor(d2));
                    }
                    catch (DivideByZeroException)
                    {
                        fractional2 = d2;
                    }

                    if (fractional1 == fractional2)
                        return Decimal.Compare(d1, d2);
                    else if (fractional1 > fractional2)
                        return 1;
                    else
                        return -1;
                }
            }

            public static void OrderByDescendingEx1()
            {
                List<decimal> decimals =
                    new List<decimal> { 6.2m, 8.3m, 0.5m, 1.3m, 6.3m, 9.7m };

                IEnumerable<decimal> query =
                    decimals.OrderByDescending(num =>
                                                   num, new SpecialComparer());

                foreach (decimal num in query)
                {
                    Console.WriteLine(num);
                }
            }

            /*
             This code produces the following output:

             9.7
             0.5
             8.3
             6.3
             1.3
             6.2
            */



.NET Framework

支援版本:4.5.2、4.5.1、4.5、4、3.5

.NET Framework Client Profile

支援版本:4、3.5 SP1

可攜式類別庫

支援版本:可攜式類別庫

適用於 Windows 市集應用程式的 .NET

支援版本:Windows 8

適用於 Windows Phone 應用程式的 .NET

支援版本:Windows Phone 8、Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (不支援伺服器核心角色), Windows Server 2008 R2 (SP1 (含) 以後版本支援伺服器核心角色,不支援 Itanium)

.NET Framework 並不支援各種平台的所有版本。如需支援版本的清單,請參閱.NET Framework 系統需求

社群新增項目

新增
顯示:
© 2014 Microsoft