내보내기(0) 인쇄
모두 확장
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Enumerable.OrderByDescending<TSource, TKey> 메서드 (IEnumerable<TSource>, Func<TSource, TKey>, IComparer<TKey>)

2013-12-13

시퀀스의 요소를 지정된 비교자를 사용하여 내림차순으로 정렬합니다.

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 메서드를 직접 호출하거나, foreach(Visual C#에서) 또는 For Each(Visual Basic에서)를 사용하여 개체를 열거할 때까지 실행되지 않습니다.

요소 자체의 값에 따라 시퀀스를 정렬하려면 keySelector에 항등 함수(Visual C#의 x => x 또는 Visual Basic의 Function(x) x)를 지정합니다.

이 메서드의 반환 형식인 IOrderedEnumerable<TElement> 형식을 확장하는 두 가지 메서드가 정의됩니다. ThenByThenByDescending이라는 이러한 두 가지 메서드를 통해 시퀀스를 정렬하는 기준을 추가로 지정할 수 있습니다. ThenByThenByDescendingIOrderedEnumerable<TElement>을 반환하므로 ThenBy 또는 ThenByDescending을 제한 없이 계속 호출할 수 있습니다.

참고참고:

IOrderedEnumerable<TElement>IEnumerable<T>에서 상속되므로 Enumerable.OrderBy, Enumerable.OrderByDescending, Enumerable.ThenBy 또는 Enumerable.ThenByDescending을 호출한 결과에 대해 Enumerable.OrderBy 또는 Enumerable.OrderByDescending을 호출할 수 있습니다. 이렇게 하면 이전에 정한 순서를 무시하는 새 기본 순서가 지정됩니다.

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)
         {
            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

Windows Phone

Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2014 Microsoft