この記事では、PowerShellの配列(Array)について使い方を説明します。
配列の作成
配列(Array)とは、数値や文字列、オブジェクトなど、同じ型のデータを複数に並べたデータの形式です。
各データは、その配列の要素と呼ばれ、インデックス番号で識別されます。
PowerShellでは、配列も変数として定義できます。
空の配列を作成するには、@()を使用します。
PS> $data = @() PS> $data.count 0
配列を作成して、@()
のかっこ内に値を配置し、変数に代入します。
PS> $data = @('Zero','One','Two','Three') PS> $data.count 4 PS> $data Zero One Two Three
この配列には項目が 4 つあります。 $data
変数を呼び出すと、それらの項目の一覧が表示されます。 文字列の配列の場合は、文字列ごとに 1 行返されます。
配列を複数の行で宣言することもできます。 この場合、コンマは省略可能であり、通常は省略されます。
$data = @( 'Zero' 'One' 'Two' 'Three' ) PS> $data Zero One Two Three
@() で配列を作成できますが、カンマ区切りリストでも配列の作成ができます。
$data = 'Zero','One','Two','Three' PS> $data Zero One Two Three
配列の要素へのアクセス
配列の要素へのアクセスはインデックス番号を使用します。
インデックス番号は0から始まるため、最初の要素へのアクセスは次の形式で指定します。
PS> $data[0] Zero
インデックス番号の範囲で要素にアクセスする場合は、次の形式で指定します。
配列名[インデックスの始まり..インデックスの終わり]
使用例です。
PS> $a = 1,2,3,4,5,6,7,8 PS> $a[1..3] 2 3 4
これは以下と同じです。
PS> $a[1,2,3] 2 3 4
ほとんどの言語では、配列の末尾を越える項目のインデックスにアクセスしようとすると、ある種のエラーまたは例外が発生します。
PowerShell では何も返されず、通知もありません。
PS> $a[100] PS>
配列オブジェクトは配列用のメソッドやプロパティを持っているため、これらを使用すると配列に関する操作が簡単に行えます。
オブジェクトがどのようなメンバーを持っているかは、「Get-Member」で確認できます。
$aが保持するオブジェクトのメンバーを調べる
PS> Get-Member -InputObject $a TypeName: System.Object[] Name MemberType Definition ---- ---------- ---------- Count AliasProperty Count = Length Add Method int IList.Add(System.Object value) Address Method System.Object&, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a... Clear Method void IList.Clear() Clone Method System.Object Clone(), System.Object ICloneable.Clone() CompareTo Method int IStructuralComparable.CompareTo(System.Object other, System.Collections.ICo... Contains Method bool IList.Contains(System.Object value) CopyTo Method void CopyTo(array array, int index), void CopyTo(array array, long index), void... Equals Method bool Equals(System.Object obj), bool IStructuralEquatable.Equals(System.Object ... Get Method System.Object Get(int ) GetEnumerator Method System.Collections.IEnumerator GetEnumerator(), System.Collections.IEnumerator ... GetHashCode Method int GetHashCode(), int IStructuralEquatable.GetHashCode(System.Collections.IEqu... GetLength Method int GetLength(int dimension) GetLongLength Method long GetLongLength(int dimension) GetLowerBound Method int GetLowerBound(int dimension) GetType Method type GetType() GetUpperBound Method int GetUpperBound(int dimension) GetValue Method System.Object GetValue(Params int[] indices), System.Object GetValue(int index)... IndexOf Method int IList.IndexOf(System.Object value) Initialize Method void Initialize() Insert Method void IList.Insert(int index, System.Object value) Remove Method void IList.Remove(System.Object value) RemoveAt Method void IList.RemoveAt(int index) Set Method void Set(int , System.Object ) SetValue Method void SetValue(System.Object value, int index), void SetValue(System.Object valu... ToString Method string ToString() Item ParameterizedProperty System.Object IList.Item(int index) {get;set;} IsFixedSize Property bool IsFixedSize {get;} IsReadOnly Property bool IsReadOnly {get;} IsSynchronized Property bool IsSynchronized {get;} Length Property int Length {get;} LongLength Property long LongLength {get;} Rank Property int Rank {get;} SyncRoot Property System.Object SyncRoot {get;}
この結果から、CountプロパティはLengthプロパティのエイリアスであることが分かります。
ArrayクラスのLengthプロパティは、配列の要素数を得るプロパティです。
配列の要素数の確認
PS> $a.Count 8 PS> $a.Length 8
配列の最終要素の確認
最終要素のインデックス番号は、要素数から1弾いた数です。
PS> $a[7] 8 PS> $a[$a.count-1] 8
要素の追加
配列には、要素を追加できます。配列に要素を追加するには+演算子を使用します。
また、+=演算子を使用して、配列に要素を追加することもできます。
配列に要素を追加する例1
PS> $a = $a + 100 PS> $a 1 2 3 4 5 6 7 8 100
配列に要素を追加する例2
PS> $a += -200 PS> $a 1 2 3 4 5 6 7 8 100 -200
要素の削除
配列からは、簡単に要素を削除できません。
ただし、既存の配列の要素を利用して、簡単に新しい配列を作成できます。
そのため、配列から要素を取り除くには、新しい配列を定義して、新しい配列に必要な要素だけを追加します。
配列から要素を削除する例
現在の配列の要素を確認します。
PS> $a 1 2 3 4 5 6 7 8 100 -200
最初の要素から4番目の要素までを新しい配列に追加します。
PS> $newA = $a[0..3]
9番目、10番目の要素を新しい配列に追加します。
PS> $newA += $a[8..9]
これにより$aの配列の5番目から8番目の要素が取り除かれた新しい配列ができます。
PS> $newA 1 2 3 4 100 -200
まとめ
今回はPowerShellの配列について説明しました。