如何在powershell中计算数组上的滑动窗口?

时间:2016-07-25 11:47:16

标签: powershell

给定数组$arr = 1,2,3,4,我想创建一个带有值滑动窗口的新数组。我特别需要一个大小为2的窗口,结果是[[1,2],[2,3],[3,4]],但想知道是否有通用的解决方案。

我最终需要计算连续元素之间的差异,以获得[1,1,1,1]

2 个答案:

答案 0 :(得分:0)

为什么不简单地计算一个具有连续元素之间差异的新数组,如果这实际上是你之后的那些?

$diff = @(for ($i=0; $i -lt $arr.Count-1; $i++) {
  $arr[$i+1] - $arr[$i]
})

结果数组将是[1,1,1],因为$arr的最后一个元素没有要比较的相邻元素。

答案 1 :(得分:0)

阵列非常棘手。请参阅下面的滑动窗口的通用解决方案和您的最终需求:

$arr = 1,2,3,4
#create window, notice comma (,)
$result = 1..($arr.Length-1) | % { ,($arr[$_-1], $arr[$_]) }

#show elements
"[0][0]=$($result[0][0])"
"[0][1]=$($result[0][1])"

#ultimate need
1..($arr.Length-1) | % { $arr[$_]-$arr[$_-1] }

看一下about_Arrays文档中的这个片段:

  

您也可以先输入逗号(,)来获取数组成员   通过管道传递给Get-Member cmdlet的值。逗号制作了   数组数组中的第二项。 Windows PowerShell管道   一次一个数组,Get-Member返回成员   阵列。

     

,$ a |获取会员

     

,(1,2,3)|获取会员