Enumerable.OrderByDescending メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
シーケンスの要素を降順に並べ替えます。
オーバーロード
OrderByDescending<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) |
シーケンスの要素をキーに従って降順に並べ替えます。 |
OrderByDescending<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>) |
指定された比較子を使用してシーケンスの要素を降順に並べ替えます。 |
OrderByDescending<TSource,TKey>(IEnumerable<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> ^ OrderByDescending(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector);
public static System.Linq.IOrderedEnumerable<TSource> OrderByDescending<TSource,TKey> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector);
static member OrderByDescending : seq<'Source> * Func<'Source, 'Key> -> System.Linq.IOrderedEnumerable<'Source>
<Extension()>
Public Function OrderByDescending(Of TSource, TKey) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey)) As IOrderedEnumerable(Of TSource)
型パラメーター
- TSource
source
の要素の型。
- TKey
keySelector
によって返されるキーの型。
パラメーター
- source
- IEnumerable<TSource>
順序付ける値のシーケンス。
- keySelector
- Func<TSource,TKey>
要素からキーを抽出する関数。
戻り値
要素がキーに従って降順に並べ替えられている IOrderedEnumerable<TElement>。
例外
source
または keySelector
が null
です。
注釈
このメソッドは、遅延実行を使用して実装されます。 即時戻り値は、アクションの実行に必要なすべての情報を格納する オブジェクトです。 このメソッドで表されるクエリは、オブジェクトがメソッドを直接呼び出GetEnumerator
すか、C# For Each
または Visual Basic で を使用foreach
して列挙されるまで実行されません。
要素自体の値でシーケンスを並べ替える場合は、 の ID 関数 (x => x
C# または Function(x) x
Visual Basic の場合) keySelector
を指定します。
このメソッドの例については、OrderByDescending<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>) に関するページを参照してください。
型 IOrderedEnumerable<TElement>を拡張するために 2 つのメソッドが定義されています。これは、このメソッドの戻り値の型です。 これら 2 つのメソッド (つまり ThenBy
、 と ThenByDescending
) を使用すると、シーケンスを並べ替える追加の並べ替え条件を指定できます。 ThenBy
と ThenByDescending
は、 IOrderedEnumerable<TElement>を返します。これは、 または ThenByDescending
に対して連続する任意の数の呼び出しをThenBy
行うことができます。
注意
は から継承されるためIOrderedEnumerable<TElement>、または OrderByDescending の呼び出OrderByしの結果で または ThenByDescendingをOrderByOrderByDescendingThenBy呼び出すことができます。IEnumerable<T> これにより、以前に確立された順序を無視する新しいプライマリ順序が導入されます。
このメソッドは、既定の比較子 Defaultを使用してキーを比較します。
このメソッドは、安定した並べ替えを実行します。つまり、2 つの要素のキーが等しい場合、要素の順序は保持されます。 これに対し、不安定な並べ替えでは、同じキーを持つ要素の順序は保持されません。
クエリ式の構文では、 orderby descending
(C#) 句または Order By Descending
(Visual Basic) 句は の OrderByDescending呼び出しに変換されます。
こちらもご覧ください
- OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)
- OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)
- orderby 句 (C# リファレンス)
- Order By 句 (Visual Basic)
適用対象
OrderByDescending<TSource,TKey>(IEnumerable<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> ^ OrderByDescending(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, System::Collections::Generic::IComparer<TKey> ^ comparer);
public static System.Linq.IOrderedEnumerable<TSource> OrderByDescending<TSource,TKey> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, System.Collections.Generic.IComparer<TKey> comparer);
public static System.Linq.IOrderedEnumerable<TSource> OrderByDescending<TSource,TKey> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, System.Collections.Generic.IComparer<TKey>? comparer);
static member OrderByDescending : seq<'Source> * Func<'Source, 'Key> * System.Collections.Generic.IComparer<'Key> -> System.Linq.IOrderedEnumerable<'Source>
<Extension()>
Public Function OrderByDescending(Of TSource, TKey) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), comparer As IComparer(Of TKey)) As IOrderedEnumerable(Of TSource)
型パラメーター
- TSource
source
の要素の型。
- TKey
keySelector
によって返されるキーの型。
パラメーター
- source
- IEnumerable<TSource>
順序付ける値のシーケンス。
- keySelector
- Func<TSource,TKey>
要素からキーを抽出する関数。
- comparer
- IComparer<TKey>
キーを比較する IComparer<T>。
戻り値
要素がキーに従って降順に並べ替えられている IOrderedEnumerable<TElement>。
例外
source
または keySelector
が null
です。
例
次のコード例では、 を使用 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
*/
' This class provides a custom implementation
' of the IComparer.Compare() method.
Class SpecialComparer
Implements IComparer(Of 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>
Function Compare(ByVal d1 As Decimal, ByVal d2 As Decimal) As Integer _
Implements IComparer(Of Decimal).Compare
Dim fractional1 As Decimal
Dim fractional2 As Decimal
' Get the fractional part of the first number.
Try
fractional1 = Decimal.Remainder(d1, Decimal.Floor(d1))
Catch ex As DivideByZeroException
fractional1 = d1
End Try
' Get the fractional part of the second number.
Try
fractional2 = Decimal.Remainder(d2, Decimal.Floor(d2))
Catch ex As DivideByZeroException
fractional2 = d2
End Try
If (fractional1 = fractional2) Then
' The fractional parts are equal, so compare the entire numbers.
Return Decimal.Compare(d1, d2)
ElseIf (fractional1 > fractional2) Then
Return 1
Else
Return -1
End If
End Function
End Class
Sub OrderByDescendingEx1()
' Create a list of decimal values.
Dim decimals As New List(Of Decimal)(New Decimal() _
{6.2D, 8.3D, 0.5D, 1.3D, 6.3D, 9.7D})
' Order the elements of the list by passing
' in the custom IComparer class.
Dim query As IEnumerable(Of Decimal) =
decimals.OrderByDescending(Function(num) num,
New SpecialComparer())
Dim output As New System.Text.StringBuilder
For Each num As Decimal In query
output.AppendLine(num)
Next
' Display the output.
Console.WriteLine(output.ToString())
End Sub
' This code produces the following output:
'
' 9.7
' 0.5
' 8.3
' 6.3
' 1.3
' 6.2
注釈
このメソッドは、遅延実行を使用して実装されます。 即時戻り値は、アクションの実行に必要なすべての情報を格納する オブジェクトです。 このメソッドで表されるクエリは、オブジェクトがメソッドを直接呼び出GetEnumerator
すか、C# For Each
または Visual Basic で を使用foreach
して列挙されるまで実行されません。
要素自体の値でシーケンスを並べ替える場合は、 の ID 関数 (x => x
C# または Function(x) x
Visual Basic の場合) keySelector
を指定します。
型 IOrderedEnumerable<TElement>を拡張するために 2 つのメソッドが定義されています。これは、このメソッドの戻り値の型です。 これら 2 つのメソッド (つまり ThenBy
、 と ThenByDescending
) を使用すると、シーケンスを並べ替える追加の並べ替え条件を指定できます。 ThenBy
と ThenByDescending
は、 IOrderedEnumerable<TElement>を返します。これは、 または ThenByDescending
に対して連続する任意の数の呼び出しをThenBy
行うことができます。
注意
は から継承されるためIOrderedEnumerable<TElement>、または OrderByDescending の呼び出OrderByしの結果で または ThenByDescendingをOrderByOrderByDescendingThenBy呼び出すことができます。IEnumerable<T> これにより、以前に確立された順序を無視する新しいプライマリ順序が導入されます。
が null
の場合comparer
、キーの比較に既定の比較子Defaultが使用されます。
このメソッドは、安定した並べ替えを実行します。つまり、2 つの要素のキーが等しい場合、要素の順序は保持されます。 これに対し、不安定な並べ替えでは、同じキーを持つ要素の順序は保持されません。
こちらもご覧ください
- OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)
- OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)
適用対象
.NET