Enumerable.SkipWhile Method

Definition

只要指定的條件為 true,便略過序列中的項目,然後傳回其餘項目。Bypasses elements in a sequence as long as a specified condition is true and then returns the remaining elements.

Overloads

SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

只要指定的條件為 true,便略過序列中的項目,然後傳回其餘項目。Bypasses elements in a sequence as long as a specified condition is true and then returns the remaining elements.

SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>)

只要指定的條件為 true,便略過序列中的項目,然後傳回其餘項目。Bypasses elements in a sequence as long as a specified condition is true and then returns the remaining elements. 項目的索引是用於述詞功能的邏輯中。The element's index is used in the logic of the predicate function.

SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

只要指定的條件為 true,便略過序列中的項目,然後傳回其餘項目。Bypasses elements in a sequence as long as a specified condition is true and then returns the remaining elements.

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)

Type Parameters

TSource

source 項目的類型。The type of the elements of source.

Parameters

source
IEnumerable<TSource>

傳回項目的 IEnumerable<T>An IEnumerable<T> to return elements from.

predicate
Func<TSource,Boolean>

用來測試每個項目是否符合條件的函式。A function to test each element for a condition.

Returns

IEnumerable<TSource>

IEnumerable<T>,其中包含的項目位於輸入序列中,而且是從沒有通過 predicate 所指定測試之線性系列中的第一個項目開始。An IEnumerable<T> that contains the elements from the input sequence starting at the first element in the linear series that does not pass the test specified by predicate.

Exceptions

sourcepredicatenullsource or predicate is null.

Examples

下列程式碼範例示範如何使用 SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) 來略過陣列的元素,前提是條件為 true。The following code example demonstrates how to use SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) to skip elements of an array as long as a condition is 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

Remarks

SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) 方法是使用延後執行來實行。The SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) method is implemented by using deferred execution. 立即傳回值是一個物件,它會儲存執行動作所需的所有資訊。The immediate return value is an object that stores all the information that is required to perform the action. 在列舉物件之前,不會執行此方法所代表的查詢,方法是直接呼叫其 GetEnumerator 方法,或是在 Visual Basic 中C#使用 Visual 或 For Each 中的 foreachThe query represented by this method is not executed until the object is enumerated either by calling its GetEnumerator method directly or by using foreach in Visual C# or For Each in Visual Basic.

這個方法會使用 predicate 來測試 source 的每個專案,並在 true結果時略過元素。This method tests each element of source by using predicate and skips the element if the result is true. 在述詞函式傳回專案的 false 之後,就會產生該專案和 source 中剩餘的元素,而且不會再叫用 predicateAfter the predicate function returns false for an element, that element and the remaining elements in source are yielded and there are no more invocations of predicate.

如果 predicate 傳回序列中所有專案的 true,則會傳回空的 IEnumerable<T>If predicate returns true for all elements in the sequence, an empty IEnumerable<T> is returned.

TakeWhileSkipWhile 方法是可補充的功能。The TakeWhile and SkipWhile methods are functional complements. 指定序列 coll 和純 p函數時,串連 coll.TakeWhile(p)coll.SkipWhile(p) 的結果,會產生與 coll相同的順序。Given a sequence coll and a pure function p, concatenating the results of coll.TakeWhile(p) and coll.SkipWhile(p) yields the same sequence as coll.

在 Visual Basic 查詢運算式語法中,Skip While 子句會轉譯為 SkipWhile的調用。In Visual Basic query expression syntax, a Skip While clause translates to an invocation of SkipWhile.

See also

SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>)

只要指定的條件為 true,便略過序列中的項目,然後傳回其餘項目。Bypasses elements in a sequence as long as a specified condition is true and then returns the remaining elements. 項目的索引是用於述詞功能的邏輯中。The element's index is used in the logic of the predicate function.

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)

Type Parameters

TSource

source 項目的類型。The type of the elements of source.

Parameters

source
IEnumerable<TSource>

傳回項目的 IEnumerable<T>An IEnumerable<T> to return elements from.

predicate
Func<TSource,Int32,Boolean>

用來測試各來源項目是否符合條件的函式;此函式的第二個參數代表來源項目的索引。A function to test each source element for a condition; the second parameter of the function represents the index of the source element.

Returns

IEnumerable<TSource>

IEnumerable<T>,其中包含的項目位於輸入序列中,而且是從沒有通過 predicate 所指定測試之線性系列中的第一個項目開始。An IEnumerable<T> that contains the elements from the input sequence starting at the first element in the linear series that does not pass the test specified by predicate.

Exceptions

sourcepredicatenullsource or predicate is null.

Examples

下列程式碼範例將示範如何使用 SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>) 略過陣列的元素,前提是相依于元素索引的條件為 true。The following code example demonstrates how to use SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>) to skip elements of an array as long as a condition that depends on the element's index is 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

Remarks

這個方法是使用延後執行來執行。This method is implemented by using deferred execution. 立即傳回值是一個物件,它會儲存執行動作所需的所有資訊。The immediate return value is an object that stores all the information that is required to perform the action. 在列舉物件之前,不會執行此方法所代表的查詢,方法是直接呼叫其 GetEnumerator 方法,或是在 Visual Basic 中C#使用 Visual 或 For Each 中的 foreachThe query represented by this method is not executed until the object is enumerated either by calling its GetEnumerator method directly or by using foreach in Visual C# or For Each in Visual Basic.

SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>) 方法會使用 predicate 來測試 source 的每個元素,並在 true結果時略過元素。The SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>) method tests each element of source by using predicate and skips the element if the result is true. 在述詞函式傳回專案的 false 之後,就會產生該專案和 source 中剩餘的元素,而且不會再叫用 predicateAfter the predicate function returns false for an element, that element and the remaining elements in source are yielded and there are no more invocations of predicate.

如果 predicate 傳回序列中所有專案的 true,則會傳回空的 IEnumerable<T>If predicate returns true for all elements in the sequence, an empty IEnumerable<T> is returned.

predicate 的第一個引數表示要測試的元素。The first argument of predicate represents the element to test. 第二個引數代表 source內元素以零為起始的索引。The second argument represents the zero-based index of the element within source.

TakeWhileSkipWhile 方法是可補充的功能。The TakeWhile and SkipWhile methods are functional complements. 指定序列 coll 和純 p函數時,串連 coll.TakeWhile(p)coll.SkipWhile(p) 的結果,會產生與 coll相同的順序。Given a sequence coll and a pure function p, concatenating the results of coll.TakeWhile(p) and coll.SkipWhile(p) yields the same sequence as coll.

在 Visual Basic 查詢運算式語法中,Skip While 子句會轉譯為 SkipWhile的調用。In Visual Basic query expression syntax, a Skip While clause translates to an invocation of SkipWhile.

See also

Applies to