Enumerable.SkipWhile Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Обход элементов последовательности до тех пор, пока указанное условие имеет значение true, а затем возвращает оставшиеся элементы.
Перегрузки
| Имя | Описание |
|---|---|
| SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) |
Обход элементов последовательности до тех пор, пока указанное условие имеет значение true, а затем возвращает оставшиеся элементы. |
| SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>) |
Обход элементов последовательности до тех пор, пока указанное условие имеет значение true, а затем возвращает оставшиеся элементы. Индекс элемента используется в логике функции предиката. |
SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)
Обход элементов последовательности до тех пор, пока указанное условие имеет значение true, а затем возвращает оставшиеся элементы.
public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TSource> ^ SkipWhile(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, bool> ^ predicate);
public static System.Collections.Generic.IEnumerable<TSource> SkipWhile<TSource>(this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,bool> predicate);
static member SkipWhile : seq<'Source> * Func<'Source, bool> -> seq<'Source>
<Extension()>
Public Function SkipWhile(Of TSource) (source As IEnumerable(Of TSource), predicate As Func(Of TSource, Boolean)) As IEnumerable(Of TSource)
Параметры типа
- TSource
Тип элементов source.
Параметры
- source
- IEnumerable<TSource>
Возвращает IEnumerable<T> элементы из.
Возвращаемое значение
Объект IEnumerable<T> , содержащий элементы из входной последовательности, начиная с первого элемента линейного ряда, который не проходит тест, указанный в predicateфайле.
Исключения
source или predicate есть null.
Примеры
В следующем примере кода показано, как использовать SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) для пропуска элементов массива, если условие имеет значение true.
int[] grades = { 59, 82, 70, 56, 92, 98, 85 };
IEnumerable<int> lowerGrades =
grades
.OrderByDescending(grade => grade)
.SkipWhile(grade => grade >= 80);
Console.WriteLine("All grades below 80:");
foreach (int grade in lowerGrades)
{
Console.WriteLine(grade);
}
/*
This code produces the following output:
All grades below 80:
70
59
56
*/
' Create an array of integers that represent grades.
Dim grades() As Integer = {59, 82, 70, 56, 92, 98, 85}
' Sort the grades in descending order and
' get all grades greater less than 80.
Dim lowerGrades As IEnumerable(Of Integer) =
grades _
.OrderByDescending(Function(grade) grade) _
.SkipWhile(Function(grade) grade >= 80)
' Display the results.
Dim output As New System.Text.StringBuilder("All grades below 80:" & vbCrLf)
For Each grade As Integer In lowerGrades
output.AppendLine(grade)
Next
Console.WriteLine(output.ToString())
' This code produces the following output:
'
' All grades below 80:
' 70
' 59
' 56
Комментарии
Метод SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) реализуется с помощью отложенного выполнения. Немедленное возвращаемое значение — это объект, в который хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется, пока объект не перечисляется путем вызова метода GetEnumerator напрямую или с помощью метода foreach в C# или For Each в Visual Basic.
Этот метод проверяет каждый элемент с помощью predicate и пропускает элементsource, если результат имеет значениеtrue. После возврата false функции предиката для элемента этот элемент и остальные элементы source будут возвращены, а вызовы predicateотсутствуют.
Если predicate возвращается true для всех элементов в последовательности, возвращается пустое IEnumerable<T> значение.
SkipWhile Методы TakeWhile являются функциональными дополнениями. Учитывая последовательность coll коллекции и чистую функциюp, сцепляя результаты coll.TakeWhile(p) и возвращая ту же последовательность, что collи coll.SkipWhile(p) .
В синтаксисе выражения запроса Visual Basic предложение Skip While преобразуется в вызов SkipWhile.
См. также раздел
Применяется к
SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>)
Обход элементов последовательности до тех пор, пока указанное условие имеет значение true, а затем возвращает оставшиеся элементы. Индекс элемента используется в логике функции предиката.
public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TSource> ^ SkipWhile(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, int, bool> ^ predicate);
public static System.Collections.Generic.IEnumerable<TSource> SkipWhile<TSource>(this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,int,bool> predicate);
static member SkipWhile : seq<'Source> * Func<'Source, int, bool> -> seq<'Source>
<Extension()>
Public Function SkipWhile(Of TSource) (source As IEnumerable(Of TSource), predicate As Func(Of TSource, Integer, Boolean)) As IEnumerable(Of TSource)
Параметры типа
- TSource
Тип элементов source.
Параметры
- source
- IEnumerable<TSource>
Возвращает IEnumerable<T> элементы из.
Функция для проверки каждого исходного элемента для условия; второй параметр функции представляет индекс исходного элемента.
Возвращаемое значение
Объект IEnumerable<T> , содержащий элементы из входной последовательности, начиная с первого элемента линейного ряда, который не проходит тест, указанный в predicateфайле.
Исключения
source или predicate есть null.
Примеры
В следующем примере кода показано, как использовать SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>) для пропуска элементов массива, если условие, зависящее от индекса элемента, имеет значение true.
int[] amounts = { 5000, 2500, 9000, 8000,
6500, 4000, 1500, 5500 };
IEnumerable<int> query =
amounts.SkipWhile((amount, index) => amount > index * 1000);
foreach (int amount in query)
{
Console.WriteLine(amount);
}
/*
This code produces the following output:
4000
1500
5500
*/
' Create an array of integers.
Dim amounts() As Integer =
{5000, 2500, 9000, 8000, 6500, 4000, 1500, 5500}
' Skip items in the array whose value is greater than
' the item's index times 1000; get the remaining items.
Dim query As IEnumerable(Of Integer) =
amounts.SkipWhile(Function(amount, index) _
amount > index * 1000)
' Output the results.
Dim output As New System.Text.StringBuilder
For Each amount As Integer In query
output.AppendLine(amount)
Next
Console.WriteLine(output.ToString())
' This code produces the following output:
'
' 4000
' 1500
' 5500
Комментарии
Этот метод реализуется с помощью отложенного выполнения. Немедленное возвращаемое значение — это объект, в который хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется, пока объект не перечисляется путем вызова метода GetEnumerator напрямую или с помощью метода foreach в C# или For Each в Visual Basic.
Метод SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>) проверяет каждый элемент с помощью predicate и пропускает элементsource, если результат имеет значениеtrue. После возврата false функции предиката для элемента этот элемент и остальные элементы source будут возвращены, а вызовы predicateотсутствуют.
Если predicate возвращается true для всех элементов в последовательности, возвращается пустое IEnumerable<T> значение.
Первый аргумент predicate представляет элемент для тестирования. Второй аргумент представляет отсчитываемый от нуля индекс элемента внутри source.
SkipWhile Методы TakeWhile являются функциональными дополнениями. Учитывая последовательность coll коллекции и чистую функциюp, сцепляя результаты coll.TakeWhile(p) и возвращая ту же последовательность, что collи coll.SkipWhile(p) .
В синтаксисе выражения запроса Visual Basic предложение Skip While преобразуется в вызов SkipWhile.