[原文作者]:Jared Parsons
[原文链接]:PowerShell LINQ: Skip-While
在PowerShell LINQ这个系列中,接下来要介绍的就是SkipWhile。这个LINQ函数带有一个枚举类型的实例和一个判断条件。这个函数中的判断条件以当前元素的值来作为参数进行判断,只要判断条件为true就跳过该元素,直到判断条件为false时,将剩余的元素全部返回。
LINQ版本以Func<T,TResult>的形式传入判断条件。在PowerShell中等价于delegate的是一个脚本块,但是它和.Net delegate不同,它没有什么途径可以使得Skip-While函数接受特殊的数字或者特殊的参数类型,不过在调用该函数时,将会获得相关契约的暗示。
这个函数会自动匹配SkipWhile 的LINQ版本的相关契约,而不需要给它绝对的输入。
#============================================================================
# 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 {}
}
用例如下:
PS) 1..10 | Skip-While { $args[0] -lt 6 }
6
7
8
9
10
PS)
打印 | 张贴于 2009-02-20 14:29:35 | Tag:暂无标签
留言反馈