配列$arr = 1,2,3,4
が与えられているので、値のスライディングウィンドウで新しい配列を作成したいと思います。私の具体的なニーズは、サイズ2のウィンドウであるため、結果は[[1,2],[2,3],[3,4]]
ですが、一般的な解決法があるかどうかを知りたいと思います。powershellで配列上のスライディングウィンドウを計算するにはどうすればよいですか?
私の究極の必要性は、連続する要素間の差を計算して、[1,1,1,1]
になることです。
配列$arr = 1,2,3,4
が与えられているので、値のスライディングウィンドウで新しい配列を作成したいと思います。私の具体的なニーズは、サイズ2のウィンドウであるため、結果は[[1,2],[2,3],[3,4]]
ですが、一般的な解決法があるかどうかを知りたいと思います。powershellで配列上のスライディングウィンドウを計算するにはどうすればよいですか?
私の究極の必要性は、連続する要素間の差を計算して、[1,1,1,1]
になることです。
アレイは非常にトリッキーです。
$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コマンドレットにパイプされた値。コンマは、 配列を配列の配列の2番目の項目にします。 Windows PowerShellは一度に1つずつ配列 をパイプし、Get-Memberは 配列のメンバーを返します。
、$ a | Get-Member
、(1,2,3)| Get-Member
連続した要素の違いを使って新しい配列を計算するのはなぜですか。
$diff = @(for ($i=0; $i -lt $arr.Count-1; $i++) {
$arr[$i+1] - $arr[$i]
})
$arr
の最後の要素と比較する隣接要素を持たないように、得られた配列は、しかし、[1,1,1]
あろう。