【PowerShell】配列に学び・そして極める~値の追加をしてみよう~

どうも!リョクちゃです。

今回は前回の記事で紹介した、配列を更に学び進め

極めていくためのステップアップとして配列への値を追加する方法を紹介していきます。

前回はこちらになります。

あるデータをまとめて変数に格納しておきたい、することはできないか?また格納した変数から1つずつ取り出して、処理をしたいときがありませんか?そんなときに使える配列とforeachをPowerShellで紹介しています。参考になれば嬉しいです。



配列の宣言~おさらい~

配列は

$<変数名> = @(値1, 値2, 値3, ……, 値n)

と記述することで宣言することができました。

例) “Apple”、”Grape”が格納されている配列変数testを作成します。

スポンサーリンク




配列へのアクセス

配列にアクセスするには

$<配列変数>[インデックス]

と記述することで、アクセスすることができました。

例) 配列変数testの1番目に格納されている”Grape”を取り出します。

インデックスが配列の範囲外を指定してしまってもエラーの表示はされないので注意。

他の言語では、例外が発生します。(IndexOutOfRangeExceptionの発生)

配列への値を追加

おさらいもできたことで、早速先ほど作成した変数testを例に

値の追加をしていきます。

配列へ値を追加するには

$<配列変数>.add(“追加したい値”)

と記述することで、配列に値を追加することができます。

例) 配列変数testに”Orange”を追加します。

実行してみます……。

はい、実行するとわかるのですが配列変数testに値を追加しようとすると

例外(エラー)が発生してしまいます。

配列の作り方に問題が?!

実は、配列の最初の宣言で問題がありました。

先ほどのコードを実行してみると、以下のような内容の例外が出力されます。

コレクション固定サイズです

ここに問題がありそうです、調べてみると、

配列を宣言する時に、@()で作ったのを覚えていますか?

@()で配列を宣言してしまうと、サイズが固定長の配列として作られてしまうのです。

これはいわゆる、イミュータブルな配列といえそうですね。

Pythonでいう、タプル(tuple)に近いかもしれません。

※完全にタプルではないです、PowerShellの配列の場合

値の変更は可能です。タプルは更新が不可能。

例) 配列変数testのインデックス1番目の値を”Bacon”に変更します。

この変更はできてしまいます。

固定サイズかどうかの確認

言葉だけでは、本当に@()で宣言した配列が固定サイズなのかわからないので

以下のメソッドを利用して、確認をしてみます。

$<配列変数>.IsFixedSize

IsFixedSizeメソッドでは、固定サイズか否かを判定し、

True/Falseで結果を返してくれます

例) 配列変数testが固定サイズかどうか確認します。

可変長の配列を作る

それでは値を追加するには、固定長ではない配列を作る必要があります。

固定長ではない配列を可変長の配列といいます。

可変長の配列を作るには、

$<変数名> = New-Object System.Collections.Generic.List[型名]
と記述することで可変長の配列を作ることができます

例) 可変長の配列sampleを作成します。

作成した配列に値を追加していきます。

配列変数sampleを確認してみると、

例外が発生することなく、配列変数sampleに値を追加でき、

ちゃんと格納されているのも確認できました。



まとめ

配列へ値を追加する方法を紹介していきました。

配列の宣言の仕方によっては、固定長サイズや可変長サイズで作成されてしまうといった事に気を付けながら配列を作るようにしていきましょう

可変長サイズの配列が作れるようになると、動的に値を追加することが可能になるので、
処理内で値を加工して、配列変数に追加することができるようになります。

便利なので学習の価値はありですね。

最後までお読みいただき、ありがとうございます。

スポンサーリンク