情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Enumerable.OrderByDescending<TSource, TKey> メソッド (IEnumerable<TSource>, Func<TSource, TKey>, IComparer<TKey>)

2013/12/12

指定された比較子を使用してシーケンスの要素を降順に並べ替えます。

Namespace:  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> 型の任意のオブジェクトのインスタンス メソッドとして呼び出すことができます。インスタンス メソッド構文を使用してこのメソッドを呼び出す場合は、最初のパラメーターを省略します。

例外条件
ArgumentNullException

source または keySelectornull です。

このメソッドは遅延実行を使用して実装されます。アクションの実行に必要なすべての情報を格納するオブジェクトがすぐに返されます。このメソッドで表されるクエリは、オブジェクトの GetEnumerator メソッドを直接呼び出すか、または Visual C# の foreach または Visual Basic の For Each を使用してオブジェクトが列挙されるまで、実行されません。

要素自体の値を使用してシーケンスの順序付けを行うには、keySelector の ID 関数 (Visual C# では x => x、Visual Basic では Function(x) x) を指定します。

このメソッドの戻り値の型である IOrderedEnumerable<TElement> 型を拡張するために、2 つのメソッドが定義されます。この 2 つのメソッド (ThenBy および ThenByDescending) によって、シーケンスを並べ替えるための追加の並べ替え条件を指定できます。また、ThenBy および ThenByDescending は、IOrderedEnumerable<TElement> を返します。これは、ThenBy または ThenByDescending を連続して呼び出すことができることを意味します。

メモメモ:

IOrderedEnumerable<TElement>IEnumerable<T> を継承するので、Enumerable.OrderByEnumerable.OrderByDescendingEnumerable.ThenBy、または Enumerable.ThenByDescending を呼び出した結果に対して、Enumerable.OrderBy または Enumerable.OrderByDescending を呼び出すことができます。これにより、以前確立された順序を無視する新しい主要な順序が導入されます。

comparernull の場合は、既定の等値比較子 Default を使用して値が比較されます。

このメソッドは安定した並べ替えを実行します。つまり、2 つの要素のキーが等しい場合、要素の順序は保持されます。これに対し、不安定な並べ替えでは、同じキーを持つ要素の順序が保持されません。

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)
         {
            outputBlock.Text += num + "\n";
         }
      }

      /*
       This code produces the following output:

       9.7
       0.5
       8.3
       6.3
       1.3
       6.2
      */



Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示: