Enumerable.OrderBy Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Сортирует элементы последовательности в порядке возрастания.
Перегрузки
OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) |
Сортирует элементы последовательности в порядке возрастания ключа. |
OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>) |
Сортирует элементы последовательности в порядке возрастания с использованием указанного компаратора. |
OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)
Сортирует элементы последовательности в порядке возрастания ключа.
public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
static System::Linq::IOrderedEnumerable<TSource> ^ OrderBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector);
public static System.Linq.IOrderedEnumerable<TSource> OrderBy<TSource,TKey> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector);
static member OrderBy : seq<'Source> * Func<'Source, 'Key> -> System.Linq.IOrderedEnumerable<'Source>
<Extension()>
Public Function OrderBy(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<TSource>
Объект IOrderedEnumerable<TElement>, элементы которого отсортированы по ключу.
Исключения
Параметр source
или keySelector
имеет значение null
.
Примеры
В следующем примере кода показано, как сортировать OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) элементы последовательности.
class Pet
{
public string Name { get; set; }
public int Age { get; set; }
}
public static void OrderByEx1()
{
Pet[] pets = { new Pet { Name="Barley", Age=8 },
new Pet { Name="Boots", Age=4 },
new Pet { Name="Whiskers", Age=1 } };
IEnumerable<Pet> query = pets.OrderBy(pet => pet.Age);
foreach (Pet pet in query)
{
Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
}
}
/*
This code produces the following output:
Whiskers - 1
Boots - 4
Barley - 8
*/
Structure Pet
Public Name As String
Public Age As Integer
End Structure
Sub OrderByEx1()
' Create an array of Pet objects.
Dim pets() As Pet = {New Pet With {.Name = "Barley", .Age = 8},
New Pet With {.Name = "Boots", .Age = 4},
New Pet With {.Name = "Whiskers", .Age = 1}}
' Order the Pet objects by their Age property.
Dim query As IEnumerable(Of Pet) =
pets.OrderBy(Function(pet) pet.Age)
Dim output As New System.Text.StringBuilder
For Each pt As Pet In query
output.AppendLine(pt.Name & " - " & pt.Age)
Next
' Display the output.
Console.WriteLine(output.ToString())
End Sub
' This code produces the following output:
'
' Whiskers - 1
' Boots - 4
' Barley - 8
Комментарии
Этот метод реализуется с помощью отложенного выполнения. Немедленное возвращаемое значение — это объект, в который хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется до тех пор, пока объект не будет перечислен либо путем вызова метода 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, OrderByDescendingThenBy или ThenByDescending. При этом вводится новое первичное упорядочение, которое игнорирует ранее установленное упорядочение.
Этот метод сравнивает ключи с помощью средства Defaultсравнения по умолчанию.
Этот метод выполняет стабильную сортировку; то есть, если ключи двух элементов равны, порядок элементов сохраняется. В отличие от этого, неустойчивая сортировка не сохраняет порядок элементов с одинаковым ключом.
В синтаксисе orderby
выражения запроса предложение (Visual C#) или Order By
(Visual Basic) преобразуется в вызов OrderBy.
См. также раздел
- OrderByDescending<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)
- OrderByDescending<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)
- Предложение orderby (Справочник по C#)
- Предложение Order By (Visual Basic)
Применяется к
OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)
Сортирует элементы последовательности в порядке возрастания с использованием указанного компаратора.
public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
static System::Linq::IOrderedEnumerable<TSource> ^ OrderBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, System::Collections::Generic::IComparer<TKey> ^ comparer);
public static System.Linq.IOrderedEnumerable<TSource> OrderBy<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> OrderBy<TSource,TKey> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, System.Collections.Generic.IComparer<TKey>? comparer);
static member OrderBy : seq<'Source> * Func<'Source, 'Key> * System.Collections.Generic.IComparer<'Key> -> System.Linq.IOrderedEnumerable<'Source>
<Extension()>
Public Function OrderBy(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<TSource>
Объект IOrderedEnumerable<TElement>, элементы которого отсортированы по ключу.
Исключения
Параметр source
или keySelector
имеет значение null
.
Комментарии
Этот метод реализуется с помощью отложенного выполнения. Немедленное возвращаемое значение — это объект, в который хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется до тех пор, пока объект не будет перечислен либо путем вызова метода 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, OrderByDescendingThenBy или ThenByDescending. При этом вводится новое первичное упорядочение, которое игнорирует ранее установленное упорядочение.
Если comparer
это null
так, средство Default сравнения по умолчанию используется для сравнения ключей.
Этот метод выполняет стабильную сортировку; то есть, если ключи двух элементов равны, порядок элементов сохраняется. В отличие от этого, неустойчивая сортировка не сохраняет порядок элементов с одинаковым ключом.
См. также раздел
- OrderByDescending<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)
- OrderByDescending<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)