PowerShell LINQ: Skip-While
Next up in the PowerShell LINQ series is SkipWhile. This LINQ function takes an enumerable instance and a predicate. The function will skip the elements in the enumerable while the predicate is true. The argument to the predicate is the current value of the enumerable.
The LINQ version takes a predicate in the form of a Func<T,TResult>. The PowerShell equivalent of a delegate is a script block. Unlike a .Net delegate, there is no way to type the Skip-While function to accept a particular number or type of arguments. The contract with the caller will be implicit.
Other than the strict typing, the function will match the contract for the LINQ version of SkipWhile.
#============================================================================
# Skip while the condition is true
#============================================================================
function Skip-While() {
param ( [scriptblock]$pred = $(throw "Need a predicate") )
begin {
$skip = $true
}
process {
if ( $skip ) {
$skip = & $pred $_
}
if ( -not $skip ) {
$_
}
}
end {}
}
Example Usage:
PS) 1..10 | Skip-While { $args[0] -lt 6 }
6
7
8
9
10
PS)
Comments
Anonymous
January 29, 2009
PingBack from http://www.alvinashcraft.com/2009/01/29/dew-drop-january-29-2009/Anonymous
February 17, 2009
The comment has been removed