配列_2(PowerShell_08)

この連載では、PowerShellについて学んでいきます。前回の記事はこちらになります。

hirocom777.hatenadiary.org

前回は配列について学びました。配列は複数のデータを格納する方法です。

今回は配列の応用です。

要素アクセスのテクニック

配列にカンマ区切りで整数を指定することで、指定したインデックスの要素を取り出して新しい配列を作成できます。同じ要素を複数回指定することもできます。

PS > $a = @(0 , 1 , 2 , 3 , 4 , 5)
PS > $b = $a[1 , 3 , 1]
PS > $b
1
3
1

また、配列要素の指定に配列を使用することもできます。

PS > $a = @(0 , 1 , 2 , 3 , 4 , 5)
PS > $b = @(0 , -1)
PS > $a[$b]
0
5

範囲演算子

範囲演算子は、連続する整数または文字の配列を生成できます。「..」(範囲演算子)で結合された開始値と終了値の範囲の連続する値の配列を生成します。以下のように記述します。

開始値..終了値

以下は、実行例です。

PS > 0..3
0
1
2
3

0~3の要素を持つ配列を作成できました。また、開始値と終了値の大小を入れ替えると要素の内容が降順になります。

PS > 3..0
3
2
1
0

文字列を要素とする配列も作成できます。

PS > $a = @('A'..'E')
PS > $a
A
B
C
D
E

範囲演算子は配列を返すので、要素の参照時にも使用できます。

PS > $a = @('A'..'E')
PS > $a[0..2]
A
B
C
PS > $a[4..2]
E
D
C

「+」(プラス演算子)を使用して、範囲と配列内の要素のリストを組み合わせることができます。

PS > $a = @(0..9)
PS > $a[0..2 + 4..6 + 8]
0
1
2
4
5
6
8

配列のメソッド

PowerShellの配列には、配列自体を操作できるメソッドがあります。ここでは代表的なメソッドと使用例をご紹介します。

IndexOf()

指定した要素のインデックスを取得します。指定した要素が配列にない場合は、-1を返します。

PS > $a = @(1 , 2 , 3)
PS > $a.IndexOf(2)
1

要素を指定する場合は、型指定が同じでなければ正しく動作しません。

PS > $a = @("A".."E")
PS > $a.IndexOf("B")
-1
PS > $a[0].GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Char                                     System.ValueType

上の例では範囲演算子で配列を作成していますが、要素はChar型となっていて要素を見つけられませんでした。このような場合は、作成する配列や要素の型を明示することで防げます。

PS > $a = [string[]]@("A".."E")
PS > $a.IndexOf("B")
1

これで指定した要素のインデックスを正しく取得できるようになります。

ForEach()

配列内のすべての要素を反復処理し、特定の操作を実行できます。

PS > $a = @(1 , 2 , 3)
PS > $a.ForEach({$_ * 3})
3
6
9

上の例では、配列の各要素を3倍にした配列を返しています。「$_」は、ForEach()に渡された各要素を表す自動変数です。

Where()

条件を指定して、配列の要素を選択できます。

PS > $a = @(1 , 2 , 3 , 4 , 5)
PS > $a.Where{$_ -gt 3}
4
5

上の例では、配列の各要素のうち3より大きな要素の配列を返しています。「-gt」は、左辺が右辺よりも大きい場合Trueを返す比較演算子です。

Clear()

配列のすべての要素を要素データ型のデフォルト値にします。配列の要素数はそのままです。

PS > $a = @(1 , 2 , 3)
PS > $a.Clear()
PS > $a[0] -eq $null
True
PS > $a.Count
3

データ型を指定していない配列の場合、各要素は$nullとなります。

PS > $a = [int[]]@(1 , 2 , 3)
PS > $a.Clear()
PS > $a
0
0
0

データ型を整数型に指定した配列では、各要素は0(デフォルト値)となります。

Contains()

特定の要素が配列に存在するかを確認します。存在している場合はTrue、そうでない場合はFalseを返します。

PS > $a = @(1 , 2 , 3)
PS > $a.contains(3)
True
PS > $a.contains(5)
False

次回も配列

いかがでしょうか。PowerShellの配列は、色々な機能がありますね。次回も配列です。今回ご紹介しきれなかったメソッドなどを学びます。 お楽しみに!!

hirocom777.hatenadiary.org

PowerShell基礎の連載はコチラから