はじめに
Powershellでflattenをしたかったのですが、functionがありませんでした。
ForEach-Objectであっさり代替処理ができたので残しておきます。
実装
flatten
$IMAGE_EXTENSIONS = @("*.jpg", "*.png")
$OTHER_EXTENSIONS = @("*.pdf")
# 平坦化した配列 $EXTENSIONS を作成する
$EXTENSIONS = New-Object System.Collections.ArrayList
foreach ($array in @($IMAGE_EXTENSIONS, $OTHER_EXTENSIONS)) {
$array | ForEach-Object { $EXTENSIONS.add($_) | Out-Null }
}
たった2つのarrayですが、arrayが増えても対応できるようにforeachしました。
利用頻度が高い場合、function化すべきですが、外側でaddしないといけないので微妙だなぁと思いました。
書き方が冗長なのと、ぱっと見でflatten感がありません。
function化したり、method化すれば、その辺りはかなり良くなると思います。
追記
@nukie_53 さんよりコメントを頂き追記
大変すばらしい書き方だと思います。シンプルっていいですね。
基本的には、こちらの書き方を使うべきだと思います。
間違えちゃう人もいそうなので、カンマをつけない旨、しっかりコメントで残して使っていきたいサンプルですね。
シンプル版
$EXTENSIONS = @( #,カンマは付けない、改行で区切る
$IMAGE_EXTENSIONS
$OTHER_EXTENSIONS
# 必要に応じて追記
) # -> System.Object[]