PowerShellの配列(Array)

PowerShell

この記事では、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の配列について説明しました。

タイトルとURLをコピーしました