Powershellで配列の使い方まとめ。初期化、要素追加、比較の方法まで!
今日はPowershellでの配列の使い方について書きたいと思います。Powershellの配列は便利なのでよく覚えておきたいものですね。
配列の種類
Powershellの配列には以下の種類があります。
- 配列
- オブジェクトを格納するコンテナです。特定のオブジェクトを指定する場合には、インデックス(0〜)でオブジェクトを特定します。多次元配列も可能です。
- 連想配列
- オブジェクトを格納するコンテナです。インデッスではなくキーで配列を特定する点が異なります。
配列の初期化
配列の初期化は、$変数名=@(値1, 値2, ...)
で初期化します。
$array1 = @(1, 2, 3, 4, 5)
連続する値で初期化する場合は、以下のように省略できます。
$array1 = @(1..5)
連想配列の初期化は、$変数名=@{キー1=値1; キー2=値2; ...}
で初期化します。
$array1 = @{
"one" = 1;
"two" = 2;
"three" = 3;
}
要素の値を参照
配列の値を参照する場合は、$変数名[インデックス]
で参照します。インデックスは0から始まる数値です。
$array1 = @(1..10)
$sum = $array1[0] + $array[1] + $array[2] + $array[3]
# 10
連想配列の値を参照する場合は、$変数名[キー]
または$変数.キー
で参照します。
$array1 = @{
“one” = 1;
"two" = 2;
"three" = 3;
}
$sum = $array1["one"] + $array["two"] + $array["three"]
$sum = $array.one + $array.two + $array.three
# 6
部分配列
配列の中から部分的な配列を作成する場合は、$配列名[開始インデックス..終了インデックス]
で参照します。
$array1 = @(1..10)
$sum = $array1[2..4]
$sum
# 3 4 5
最後の要素の値を参照
配列の最後の要素の値を参照する場合は、$変数名[-1]
で参照します。
$array1 = @(1..10)
$sum = $array1[-1]
# 10
繰り返し処理
配列の値を順次取り出して処理したい場合、for文またはforeach文を使います。
for文ではインデックスのための変数と配列の大きさが必要となります。また、インデックスでの参照となるため、基本的に連想配列には用いられません。
一方、foreach文では配列と配列から取り出したオブジェクトを格納する変数のみ必要です。必要な変数が少なく、配列にも連想配列にも使えているため、for文よりも優れているといえます。
例:1~10までの合計値を求める(for文)
$array1 = @(1..10)
$sum = 0
for ($i = 0; $i -le< $array1.Count; $i++i)
{
$sum += $array[$i]
}
# 55
例:1~10までの合計値を求める(foreach文)
$array1 = @(1..10)
foreach ($val in $array1)
{
$sum += $val
}
# 55
要素の追加
配列の最後に要素を追加する場合は、+=
演算子を使います。
$array1 = @(1..10)
$array1 += 11
# 1 2 3 4 5 6 7 8 9 10 11
連想配列の最後に要素を追加する場合は、Add
メソッドを使用します。
$array1 = @{
"one" = 1;
"two" = 2;
"three" = 3;
}
$array1.Add("four", 4)
# 1 2 3 4
配列と配列の結合
配列と配列を結合して1つの配列にする場合は、+
演算子を使います。
注意すべき点として、+
演算子を使用した場合、単純に2つの配列を結合するだけです。2つの配列に同じ要素があった場合は重複します。
$array1 = @(1..10)
$array2 = @(5..15)
$sum = $array1 + $array2
配列に値が存在するかをチェックする
配列内に指定した値が存在するかをチェックするにはContain()
メソッドを使用します。
$array1 = @(1..10)
# 配列に7が含まれているかをチェックする
if ($array1.Contain(7))
{
# 配列に7が含まれてい# 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15
連想配列と連想配列を結合する場合にも、+
演算子を使います。
配列と異なり、重複するキーの要素があった場合は例外が発生します。
$array1 = @{
"one" = 1;
"two" = 2;
"three" = 3;
}
$array2 = @{
"four" = 4;
"five" = 5;
"six" = 6;
}
$array3 = $array1 + $array2
# 1 2 3 4 5 6
配列に値が存在するかをチェックする
配列内に指定した値が存在するかをチェックするにはContain()
メソッドを使用します。
$array1 = @(1..10)
# 配列に7が含まれているかをチェックする
if ($array1.Contain(7))
{
# 配列に7が含まれている場合の処理
}
連想配列の場合、指定したキーが存在するかはContainsKey()
メソッドを使用します。指定した値が存在するかはContainsValue()
メソッドを使用します。
$array1 = @{
"one" = 1;
"two" = 2;
"three" = 3;
}
# 配列にoneのキーが存在するかをチェックする
if ($array1.ContainsKey("one"))
{
# 存在する場合の処理
}
# 配列に2の値が存在するかをチェックする
if ($array1.ContainsValue(2))
{
# 存在する場合の処理
}
要素をソート
配列をソートする場合は、Sort-Object
を使用します。
$array1 = @(1..10)
# 配列を昇順でソートする
$array1 = $array1 | Sort-Object
# 1 2 3 4 5 6 7 8 9 10
# 配列を降順でソートする
$array1 = $array1 | Sort-Object -Descending
# 10 9 8 7 6 5 4 3 2 1
2つの配列の集合(和集合、差集合、積集合)を取得
- 和集合:2つの配列のどちらか、または両方に含まれる要素の集合
- 差集合:2つの配列のどちらかにしか含まれない要素の集合
- 積集合:2つの配列の両方に含まれる要素の集合
$array1 = @(1..10)
$array2 = @(5..15)
# 和集合(Sort-Object -Uniqueを使用する方法)
$result = $array1 + $array2 | Sort-Object -Unique
# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 和集合(Compare-Objectを使用する方法)
$result = Compare-Object $array1 $array2 -IncludeEqual | ForEach-Object inputobject | Sort-Object
# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 差集合
$result = Compare-Object -ReferenceObject $array1 -DifferenceObject $array2 -PassThru | Sort-Object
# 1 2 3 4 11 12 13 14 15
# 積集合
$result = Compare-Object $array1 $array2 -IncludeEqual -ExcludeDifferent | ForEach-Object inputobject | Sort-Object
# 5 6 7 8 9 10
最後まで読んでいただきありがとうございます。
また読んでくださいませ。
そんじゃーね。