我正在寻找一个“窗口”函数,比如 F# 的 Seq.windowed
或 Reactive 扩展 Window
。看起来它会由 Select-Object
之类的东西提供(它已经具有获取/跳过功能),但事实并非如此。
如果没有现成的,关于在没有不必要的程序循环的情况下实现“窗口”的任何想法?
我正在寻找可以很好地与 PowerShell 管道配合使用的东西。
最佳答案
您需要使用某种队列来累积和轮换足够多的先前管道项目:
function Window {
param($Size)
begin {
$Queue = [Collections.Queue]::new($Size)
}
process {
$Queue.Enqueue($_)
if($Queue.Count -eq $Size) {
@(
,$Queue.ToArray()
[void]$Queue.Dequeue()
)
}
}
}
你可以像这样使用它:
1..10 | Window 4 | Window 3 | Format-Custom -Expand CoreOnly
关于powershell - PowerShell 有 "window"函数吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41508855/