Была ли эта страница полезной?
Ваш отзыв об этом контенте важен для нас. Расскажите нам о том, что вы думаете.
Дополнительный отзыв?
1500 символов осталось
OrderByDescending(TSource, TKey) - метод (IEnumerable(TSource), Func(TSource, TKey), IComparer(TKey))
Данная статья переведена автоматически. Наведите указатель мыши на предложения статьи, чтобы просмотреть исходный текст. Дополнительные сведения.
Перевод
Текст оригинала

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

Значение параметра source или keySelectornull.

Данный метод реализуется с использованием отложенного выполнения. Немедленно возвращаемое значение — это объект, в котором хранится вся информация, необходимая для выполнения операции. Запрос, представленный данным методом, не выполняется до тех пор, пока не будет произведено перечисление объекта путем непосредственного вызова его метода GetEnumerator или с помощью оператора foreach в Visual C# либо For Each в Visual Basic.

Чтобы упорядочить последовательность по значениям самих элементов, задайте функцию идентификации (x => x в Visual C# или Function(x) x в Visual Basic) в качестве параметра keySelector.

Существуют два метода, расширяющие тип IOrderedEnumerable<TElement> — тип возвращаемого значения для данного метода. Эти два метода, а именно ThenBy и ThenByDescending, позволяют указать дополнительные условия сортировки для сортировки последовательности. ThenBy и ThenByDescending также возвращают IOrderedEnumerable<TElement>, что означает, что может быть сделано любое количество последовательных вызовов ThenBy или ThenByDescending.

ПримечаниеПримечание

Поскольку IOrderedEnumerable<TElement> наследуется из IEnumerable<T>, можно вызвать OrderBy или OrderByDescending для результатов вызова OrderBy, OrderByDescending, ThenBy или ThenByDescending. В результате устанавливается новый базовый порядок сортировки, а ранее заданный порядок игнорируется.

Если в качестве comparer задано null, для сравнения ключей используется компаратор по умолчанию 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 (клиентский профиль)

Поддерживается в версиях: 4, 3.5 с пакетом обновления 1 (SP1)

Переносимая библиотека классов

Поддерживается в версии: Переносимая библиотека классов

Приложения .NET для Магазина Windows

Поддерживается в версии: Windows 8

Приложения .NET для Windows Phone

Поддерживается в версиях: 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 с пакетом обновления 2 (SP2), Windows Server 2008 (роль основных серверных компонентов не поддерживается), Windows Server 2008 R2 (роль основных серверных компонентов поддерживается в пакете обновления 1 (SP1) или выше; системы на базе Itanium не поддерживаются)

.NET Framework поддерживает не все версии каждой платформы. Поддерживаемые версии перечислены в разделе Требования к системе для .NET Framework.

Добавления сообщества

ДОБАВИТЬ
Показ:
© 2015 Microsoft