『配列の要素へのアクセスに配列を使う』
『何を言ってるのかわからねーと思うが』と、かの有名セリフが飛び出してきそうな内容だがこれは事実。そしてこれにはとても大きな可能性が秘められている。
配列の要素へのアクセスに配列を使うというのは、配列のアクセスにはインデックスを示す数値の配列を利用できるということ。
つまり、次のようなことが数値の配列を指定するだけで可能となる。
- 部分抽出
- 並べ替え
- 反転
- 繰り返し
部分抽出
配列からその先頭 3 つを抜き出すには次のように書ける。
PS C:\> $arr = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'
PS C:\> $arr[0, 1, 2]
a
b
c
PS C:\>
幸いなことに、抜き出される配列の範囲外の要素を指定してもエラーにはならず正常に処理される。
PS C:> $arr = 'a', 'b'
PS C:> $arr[0, 1, 2]
a
b
PS C:>
並べ替え
特殊なインデックス技法を利用すると、配列を簡単に任意の順番に並べ替えることができる。
PS C:\> $arr = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'
PS C:\> $arr[9, 8, 7, 0, 1, 2]
j
i
h
a
b
c
PS C:\>
反転
当然だが、並べ替えることができるのであれば反転することもできる。
PS C:\> $arr = 'a', 'b', 'c', 'd', 'e'
PS C:\> $arr[4, 3, 2, 1, 0]
e
d
c
b
a
PS C:\>
負のインデックスを使用して書くことも可能。
PS C:\> $arr = 'a', 'b', 'c', 'd', 'e'
PS C:\> $arr[-1, -2, -3, -4, -5]
e
d
c
b
a
PS C:\>
範囲を示す Range 演算子を利用してもよい。
PS C:\> $arr = 'a', 'b', 'c', 'd', 'e'
PS C:\> $arr[4..0]
e
d
c
b
a
PS C:\>
負のインデックスを生成するように Range 演算子を使うこともできる。
PS C:\> $arr = 'a', 'b', 'c', 'd', 'e'
PS C:\> $arr[-1..-$arr.count]
e
d
c
b
a
PS C:\>
繰り返し
あまりやらないと思うが、同じ要素に繰り返しアクセスすることも可能。
PS C:\> $arr = 'a', 'b', 'c', 'd', 'e'
PS C:\> $arr[(0..4 | ForEach-Object { 2, 3 })]
c
d
c
d
c
d
c
d
c
d
PS C:\>
配列の特殊なインデックス技法のまとめ
抜き出す範囲は任意の位置を指定でき、順番や繰り返しに制限はなく、範囲外の要素を指定してもエラーにならず正常に処理される。
PS C:\> $arr = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'
PS C:\> $arr[7, 8, 9]
h
i
j
PS C:\> $arr[4, 5, 6]
e
f
g
PS C:\> $arr[1, 5, -9, 11, 5, -13, 5, 3]
b
f
b
f
f
d
PS C:\>
コメント