PowerShell配列を連番で初期化とスライス

powershell コンピュータ
powershell

スクリプトで連番の配列を使う場面があります。個人的にはforで変数を最大値になるまで加算するループを連番の配列をforeachで回すような記述に置き換えると、変数の加算や終了条件を省略できるのでのループ処理をシンプルにすることが出来ます。

便利ではありますが、ループする回数が多い場合配列の初期化が大変です。
$a = @(1,2,3,4,~中略~,99,100)
こういった問題を解消するための記述方法があります。
$a = @(1..100)
これで1~100までの連番で初期化されます。..が中略記号のようでとても覚えやすいです。
これはPowerShellだけではなく多くのプログラミング言語でも見かける記述方法です。

また、配列から特定の範囲の要素を取り出す表現としても利用できます。
$a[2..100]

ちなみに、-1は特別で最後の要素を指すインデックスになります。


# PowerShell配列を連番で初期化とスライス
$a = @(0..5)

Write-Host($a)
#0 1 2 3 4 5

Write-Host $a[1..5]
#1 2 3 4 5 

Write-Host $a[-1]
#5

Write-Host $a[1..-1]
#1 0 5 ???

Write-Host $a[-1..1]
#5 0 1 ???

Write-Host $a[-2..3]
#4 5 0 1 2 3

サンプルを実行したところ-1が最後の要素の5を指示していますが、配列の要素を切り出してみたところ、自分が考えていたそれとは振る舞いが違います。先ほど-1が特別と記述しましたが、どうやら各要素に負のインデックスを持つようです。
この仕様はどういった場面で役に立つのか私には思いつきませんでした。

コメント