我正在寻找一个“窗口”函数,比如 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/

10-12 01:23
查看更多