この連載では、PowerShellについて学んでいきます。前回の記事はこちらになります。
前回は変数のデータ型について学びました。PowerShellは、色々なデータ型があります。
今回は配列です。配列は複数のデータを格納する方法です。
配列とは
PowerShellでは変数にデータ(オブジェクト)を格納できます。配列は複数のデータを変数に格納してインデックスで管理します。変数に複数のデータを格納すると配列になります。また、@(...) で囲むことで配列であることを定義することもできます。以下のように記述します。
変数 = データ_1 , データ_2 , データ_3 , ・・・ または 変数 = @(データ_1 , データ_2 , データ_3 , ・・・)
要素が1つだけの配列を作成する場合は、要素の前にカンマを記述します。これがないと、単なる変数として扱われます。@(...) で囲む場合は、カンマは不要です。
変数 = , データ または 変数 = @(データ)
空の配列(要素が0)の配列を作成するには、以下のように記述します。
変数 = @()
「@()」は、配列部分式演算子(配列サブ演算子)です。ここまでご紹介したとおり、配列部分式演算子が無くても配列は作成できます。しかし意図しない挙動を避けるため「@()」を使用して配列を作成する習慣を付けましょう。
以下に配列の例を示します。配列の内容もコマンドレットGet-Variableで確認できます。
PS > $a = @(1 , 2 , 3) PS > $b = , 4 PS > $c = @() PS > Get-Variable -N a , b , c Name Value ---- ----- a {1, 2, 3} b {4} c {}
ご覧の通り、配列は波かっこで括って表示されます。
配列の操作
各要素へのアクセス
配列の各要素にアクセスするには、変数の後に角かっこで括ったインデックス番号で位置を指定します。配列の先頭は0で参照され、右に進むにつれて1つずつ増えていきます。また、-1を指定すると最後の要素を取得します。こちらは左に進むにつれて1ずつ減っていきます。
PS > $a[0] , $a[1] , $a[2] 1 2 3 PS > $a[-1] , $a[-2] , $a[-3] 3 2 1
インデックスで指定した要素の値を変更することもできます。
PS > $a = @(1 , 2 , 3) PS > $a[1] = 10 PS > Get-Variable -N a Name Value ---- ----- a {1, 10, 3}
要素数の取得
配列の要素数を取得するには、Countプロパティ(またはLengthプロパティ)を使用します。
PS > $a.count 3
要素の追加
PowerShellでは配列自体はイミュータブルであるため、要素を追加した配列を新規に作成する形になります。要素を追加した配列を作成するには、「+」演算子または、「+=」演算子を使います。
PS > $a = @(1 , 2 , 3) PS > $a = $a + 4 PS > $a 1 2 3 4 PS > $a += 5 PS > $a 1 2 3 4 5
配列を追加した配列を作成することもできます。
PS > $a = 1 , 2 , 3 PS > $b = 4 , 5 PS > $a += $b PS > $a 1 2 3 4 5
要素の削除については簡単に行える方法がありません。制御構文を使用する形になります。この方法は、別途ご紹介します。
配列の型指定
配列作成時に、配列に格納するデータ型を指定できます。以下のように記述します。
[データ型[]]変数 = @(データ_1 , データ_2 , データ_3 , ・・・)
データ型を指定して配列を作成すると、指定されたデータ型以外は格納できなくなります(エラーが発生する)。以下は実行例です。
PS > [int[]]$a = 1 , 2 , 3 # 整数型指定で配列を作成 PS > Get-Variable -N a Name Value ---- ----- a {1, 2, 3} PS > $a.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Int32[] System.Array PS > $a[2] = 4 # 要素を別の整数に修正 PS > Get-Variable -N a Name Value ---- ----- a {1, 2, 4} PS > $a[0] = "A" # 要素を文字データに修正 # エラーになる
整数型の配列を作成して、整数型以外のデータ(文字列型)を格納しようとするとエラーになりました。
配列の配列
配列の要素を配列にすることで、配列の配列(ジャグ配列-ネストされた配列)を実現できます。以下のように記述します。
変数 = @(@(配列_1) , @(配列_2) , @(配列_3) ・・・)
配列の要素にアクセスするには、以下のように記述します。
(変数[インデックス])[配列内配列のインデックス]
以下のように記述すると、変数でインデックスを指定しないとエラーになります。
変数[インデックス][配列内配列のインデックス]
PowerShellでは2回続けて「[]」を使用する構文はサポートされていません。
PS > $a = @(@(1,2), @(3,4), @(5,6)) PS > $a[0] 1 2 PS > ($a[1])[1] 4
次回も配列
いかがでしょうか。まとまったデータを扱う際に配列は便利です。次回も配列です。配列の応用方法をご紹介します。お楽しみに!!