about_Arrays

適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

概要をここに挿入してください。

トピック

about_Arrays

概要

項目のコレクションを格納するために設計されたデータ構造体である配列について説明します。

詳細説明

配列は、項目のコレクションを格納するために設計されたデータ構造です。格納される項目は、同じ型でも異なる型でもかまいません。

Windows PowerShell® 3.0 以降では、0 個または 1 個のオブジェクトを含むコレクションで、配列のいくつかのプロパティを使用できます。

配列の作成と初期化

配列を作成して初期化するには、変数に複数の値を代入します。配列に格納されている値は、コンマで区切られ、代入演算子 (=) によって変数名と分けられています。

たとえば、22、5、10、8、12、9、80 の 7 つの数値 (整数) を含む $A という名前の配列を作成するには、次のように入力します。

$A = 22,5,10,8,12,9,80

範囲演算子 (..) を使用して配列を作成および初期化することもできます。たとえば、5 から 8 までの値を含むを $B という名前の配列を作成して初期化するには、次のように入力します。

$B = 5..8

この結果、$B には 5、6、7、8 の 4 つの値が格納されます。

データ型が指定されていない場合は、Windows PowerShell によって各配列がオブジェクト配列 (型: System.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

配列部分式演算子

配列部分式演算子は、含まれるオブジェクトが 0 個または 1 個であっても、配列を作成します。

配列演算子の構文は次のとおりです。

@( ... )

配列演算子を使用して、0 個または 1 個のオブジェクトを含む配列を作成できます。

    PS C:\>$a = @("One")
    PS C:\>$a.Count
    1
    PS C:\>$b = @()
    PS C:\>$b.Count
    0

配列演算子は、スクリプト内でオブジェクトを取得するときに特に便利ですが、何個のオブジェクトが取得されるかはわかりません。

PS C:\> $p = @(Get-Process Notepad)

配列部分式演算子の詳細については、「about_Operators」を参照してください。

配列の読み取り

配列の変数名を使用して配列を参照できます。配列内のすべての要素を表示するには、配列名を入力します。たとえば、次のように入力します。

$a

0 から始まるインデックスを使用して配列内の要素を参照できます。インデックス番号は角かっこで囲みます。たとえば、配列 $a の最初の要素を表示するには、次のように入力します。

$a[0]

配列 $a の 3 番目の要素を表示するには、次のように入力します。

$a[2]

負の数値は、配列の末尾からカウントします。たとえば、-1 は配列の最後の要素を参照します。配列の最後の 3 つの要素を表示するには、次のように入力します。

$a[-3..-1]

ただし、この表記法を使用する場合は注意が必要です。

$a[0..-2]

このコマンドは、配列内の最後の 1 つを除くすべての要素を参照するわけではありません。配列の最初、最後、および最後から 2 番目の要素を参照します。

範囲演算子を使用して、配列内のすべての値のサブセットを表示できます。たとえば、インデックス位置 1 ~ 3 にあるデータ要素を表示するには、次のように入力します。

$a[1..3]

プラス演算子 (+) を使用して、配列内の要素のリストと範囲を結合できます。たとえば、インデックス位置 0、2、および 4 ~ 6 にある要素を表示するには、次のように入力します。

$a[0,2+4..6]

配列内の項目数を調べるには、Length プロパティまたはそのエイリアスである Count を使用します。

$a.Count

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 ループを使用します。たとえば、配列のインデックスが 4 未満の間だけ配列 $a 内の要素を表示するには、次のように入力します。

$i=0
while($i -lt 4) {$a[$i]; $i++}

配列のメンバーの取得

配列のプロパティやメソッド (Length プロパティや SetValue メソッドなど) を取得するには、Get-Member コマンドレットの InputObject パラメーターを使用します。

配列を Get-Member にパイプ処理すると、Windows PowerShell によって一度に 1 つずつ項目が送信され、Get-Member から配列内の各項目の型が返されます (重複は無視されます)。

InputObject パラメーターを使用すると、Get-Member は配列のメンバーを返します。

たとえば、次のコマンドは変数 $a 内の配列のメンバーを取得します。

Get-Member -InputObject $a

Get-Member コマンドレットにパイプ処理される値の前にコンマ (,) を入力して、配列のメンバーを取得することもできます。このコンマによって、配列は配列の配列内の 2 番目の項目になります。Windows PowerShell によって一度に 1 つずつ配列がパイプ処理され、Get-Member から配列のメンバーが返されます。

    ,$a | Get-Member
    ,(1,2,3) | Get-Member

配列の操作

配列内の要素を変更したり、配列に要素を追加したり、2 つの配列の値を 3 つ目の配列に結合したりできます。

配列内の特定の要素の値を変更するには、配列名と変更する要素のインデックスを指定し、代入演算子 (=) を使用してその要素の新しい値を指定します。たとえば、配列 $a 内の 2 番目 (インデックス位置 1) の項目の値を 10 に変更するには、次のように入力します。

$a[1] = 10

配列の SetValue メソッドを使用して値を変更することもできます。次の例では、配列 $a の 2 番目 (インデックス位置 1) の値を 500 に変更しています。

$a.SetValue(500,1)

+= 演算子を使用して、配列に要素を追加できます。この演算子を使用すると、実際には Windows PowerShell によって元の配列の値と追加された値を含む新しい配列が作成されます。たとえば、値が 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 が格納されています。

配列を削除するには、配列に値 $null を代入します。次のコマンドは、変数 $a 内の配列を削除します。

$a = $null

Remove-Item コマンドレットを使用することもできますが、特に大きな配列では、値 $null を代入する方が高速です。

要素が 0 個または 1 個の配列

Windows PowerShell 3.0 以降では、0 個または 1 個のオブジェクトを含むコレクションで、Count プロパティと Length プロパティを使用できます。また、1 個のオブジェクトを含む配列にインデックスを付けることもできます。この機能により、コレクションを予期するコマンドによって取得された項目が 2 個未満だったときに発生するスクリプト エラーを回避できます。

次の例は、この機能を具体的に示しています。

    #Zero objects
    $a = $null
    $a.Count
    0
    $a.Length
    0
    #One object
    $a = 4
    $a.Count
    1
    $a.Length
    1
    $a[0]
    4
    $a[-1]
    4

関連項目

about_Assignment_Operators

about_Hash_Tables

about_Operators

about_For

about_Foreach

about_While