about_Arrays
トピック
about_Arrays
簡易説明
データ要素を格納するためのコンパクトなデータ構造について説明します。
詳細説明
配列は、同じ型のデータ要素の集まりを格納するためのデータ構造です。Windows PowerShell は、
データ要素として string、int (32 ビット整数)、long (64 ビット整数)、bool (ブール値)、
byte、およびその他の Microsoft .NET Framework オブジェクト型をサポートしています。
配列を作成して初期化する
配列を作成して初期化するには、変数に複数の値を割り当てます。
配列に格納されている値はコンマで区切られ、変数名との間には代入演算子 (=) が入ります。
たとえば、22、5、10、8、12、9、80 という 7 つの数値 (int) を含む $A という名前の配列を作成する
には、次のように入力します。
$A = 22,5,10,8,12,9,80
配列の作成および初期化は、範囲演算子 (..) を使用して行うこともできます。たとえば、5 ~ 8 の
値を含む "$B" という名前の配列を作成して初期化するには、次のように入力します。
$B = 5..8
この結果、$B には 4 つの値 (5、6、7、および 8) が含まれます。
データ型が指定されていない場合、各配列はオブジェクト配列 (型: object[]) として作成されます。配
列のデータ型を判定するには、GetType() メソッドを使用します。たとえば、配列 $a のデータ型を判
定するには、次のように入力します。
$a.gettype()
型が厳密に指定された配列 (特定の型の値のみを含むことができる配列) を作成するには、変数を配列
型 (string[]、long[]、int32[] など) としてキャストします。配列をキャストするには、角かっこで囲んだ
配列型を変数名の前に入力します。たとえば、4 つの整数 (1500、2230、3350、および 4000) を含む $ia
という名前の 32 ビット整数配列を作成するには、次のように入力します。
[int32[]]$ia = 1500,2230,3350,4000
この結果、配列 $ia に格納できるのは整数だけになります。
Microsoft .NET Framework でサポートされている任意の型にキャストされる配列を作成できます。
たとえば、Get-Process がプロセスを表現するために取得するオブジェクトは
System.Diagnostics.Process 型です。型が厳密に指定されたプロセス オブジェクトの配列を作成する
には、次のコマンドを入力します。
[Diagnostics.Process[]]$zz = Get-Process
コマンドレット、関数、またはステートメントの出力を使用して配列に値を設定することができます。
たとえば、次のステートメントは、現在のコンピューター上で実行されている、"co" で始まるプロセス
を含む配列を作成する例です。
$LocalProcesses = get-process co*
ステートメントが単一のプロセスしか取得しない場合、$LocalProcesses 変数は配列にはなりません。
コマンドによって配列が作成されるようにするには、次の例のように、配列のサブ式演算子である @
を使用します。
$LocalProcesses = @(get-process co*)
コマンドから返されるのが単一のプロセスであっても、$LocalProcesses 変数は配列です。配列に単一
のメンバーしか存在しない場合でも、他の配列と同じように扱うことができます。たとえば、これに他
のオブジェクトを加算することができます。詳細については、「about_Operators」を参照してください。
配列を読み取る
$A や $a などの変数名を使用して配列を参照できます。大文字と小文字は区別されません。
配列のすべての要素を表示するには、配列名を入力します。次にその例を示します。
$a
位置 0 から始まるインデックスを使用して、配列の要素を参照できます。インデックス番号は角かっ
こで囲みます。たとえば、配列 $a の最初の要素を表示するには、次のように入力します。
$a[0]
配列 $a の 3 番目の要素を表示するには、次のように入力します。
$a[2]
負の数値を指定した場合、配列の最後からカウントされます。たとえば、"-1" は配列の最後の要素を
参照します。配列の最後の 3 つの要素を表示するには、次のように入力します。
$a[-3..-1]
しかし、このような表記を使用する場合には注意が必要です。
$a[0..-2]
このコマンドは、配列の最後の要素以外のすべての要素を参照するのではなく、配列の最初、最後、
および最後から 2 番目の要素だけを参照します。
範囲演算子を使用すると、配列内のすべての値のうちのサブセットを表示できます。
たとえば、インデックス位置 1 ~ 3 のデータ要素を表示するには、次のように入力します。
$a[1..3]
プラス演算子 (+) を使用すると、配列内の要素の範囲とリストを組み合わせることができます。たと
えば、インデックス位置 0、2、および 4 ~ 6 の要素を表示するには、次のように入力します。
$a[0,2+4..6]
配列に含まれる項目の数を判定するには、配列の範囲と length プロパティを組み合わせます。たと
えば、インデックス位置 2 から、配列の最後までの要素を表示するには、次のように入力します。
$a[2..($a.length-1)]
インデックスは位置 0 から始まるため、長さは -1 に設定します。したがって、配列に含まれる要素
が 3 つ (1、2、3) の場合、3 番目の要素のインデックスは、配列の長さよりも 1 だけ小さい 2 にな
ります。
Foreach ループ、For ループ、While ループなどのループ構文を使用して、配列の要素を参照するこ
ともできます。たとえば、Foreach ループを使用して配列 $a の要素を表示するには、次のように入力
します。
foreach ($element in $a) {$element}
Foreach ループは配列内の各要素を反復処理し、配列の終わりに到達するまで配列の各値を返します。
配列内で処理した要素ごとにカウンターの値を増加させる場合は、For ループが便利です。たとえ
ば、For ループを使用して、配列内の値を 1 つおきに返すには、次のように入力します。
for ($i = 0; $i -le ($a.length - 1); $i += 2) {$a[$i]}
While ループを使用すると、定義した条件が満たされなくなるまで配列の要素を表示できます。たとえ
ば、配列 $a でインデックスが 4 より小さい要素を表示するには、次のように入力します。
$i=0
while($i -lt 4) {$a[$i]; $i++}
配列のプロパティとメソッド (Length プロパティと SetValue メソッドなど) について調べるには、
Get-Member コマンドレットの InputObject パラメーターを使用します。配列を Get-Member にパ
イプすると、配列内のオブジェクトに関する情報が表示されます。InputObject パラメーターを使用す
ると、配列に関する情報が表示されます。
配列 $a のプロパティとメソッドについて調べるには、次のように入力します。
get-member -inputobject $a
配列を操作する
配列の要素の変更、配列への要素の追加、および 2 つの配列に含まれる値をさらに別の配列として結
合する操作を実行できます。
配列に含まれる特定の要素の値を変更するには、配列名および変更する要素のインデックスを指定
し、代入演算子 (=) を使用して、その要素の新しい値を指定します。たとえば、配列 $a に含まれる
2 番目の項目 (インデックス位置 1) の値を 10 に変更するには、次のように入力します。
$a[1] = 10
配列の SetValue メソッドを使用して値を変更することもできます。次の例では、配列 $a の 2 番目
の値 (インデックス位置 1) が 500 に変更されます。
$a.SetValue(500,1)
+= 演算子を使用すると、既存の配列に要素を追加できます。
この演算子は、既存の値に対する加算を行います。この演算子を配列の要素に対して使用した場合、
その要素の値への加算が行われます。この演算子を配列自体に対して使用した場合、その配列に値が
追加されます。たとえば、値が 200 の要素を配列 $a に追加するには、次のように入力します。
$a += 200
配列から要素を削除するのは簡単ではありませんが、既存の配列から選択された要素のみを含む新し
い配列を作成できます。たとえば、配列 $a から、インデックス位置 2 の値を除くすべての要素を使
用して配列 $t を作成するには、次のように入力します。
$t = $a[0,1 + 3..($a.length - 1)]
2 つの配列を 1 つの配列に結合するには、プラス演算子 (+) を使用します。次の例は、2 つの配列
を作成して結合し、その結果として作成された配列を表示しています。
$x = 1,3
$y = 5,9
$z = $x + $y
この結果、配列 $z には 1、3、5、および 9 が含まれます。
配列を削除するには、Remove-Item コマンドレットを使用して、配列を含む変数を削除します。
次のコマンドは、Variable: ドライブの要素 "a" を指定しています。
remove-item variable:a
(Variable: ドライブの詳細については、Variable プロバイダーのヘルプ トピックを参照してくだ
さい。)
関連項目
about_Assignment_Operators
about_Hash_Tables
about_Operators
about_For
about_Foreach
about_While