どうも!リョクちゃです。
今回は前回の記事で紹介した、配列を更に学び進め
極めていくためのステップアップとして配列への値を追加する方法を紹介していきます。
前回はこちらになります。
 
目次
配列の宣言~おさらい~
配列は
と記述することで宣言することができました。
例) “Apple”、”Grape”が格納されている配列変数testを作成します。
| 1 | $test = @("Apple", "Grape") | 
配列へのアクセス
配列にアクセスするには
と記述することで、アクセスすることができました。
例) 配列変数testの1番目に格納されている”Grape”を取り出します。
| 1 2 | $test[1] # Orange | 
インデックスが配列の範囲外を指定してしまってもエラーの表示はされないので注意。
他の言語では、例外が発生します。(IndexOutOfRangeExceptionの発生)
配列への値を追加
おさらいもできたことで、早速先ほど作成した変数testを例に
値の追加をしていきます。
配列へ値を追加するには
と記述することで、配列に値を追加することができます。
例) 配列変数testに”Orange”を追加します。
| 1 | $test.add("Orange") | 
実行してみます……。
はい、実行するとわかるのですが配列変数testに値を追加しようとすると
例外(エラー)が発生してしまいます。
配列の作り方に問題が?!
実は、配列の最初の宣言で問題がありました。
先ほどのコードを実行してみると、以下のような内容の例外が出力されます。
| 1 2 3 4 5 6 | "1" 個の引数を指定して "Add" を呼び出し中に例外が発生しました: "コレクションは固定サイズです。" 発生場所 行:1 文字:1 + $test.add("Orange") + ~~~~~~~~~~~~~~~~~~~     + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException     + FullyQualifiedErrorId : NotSupportedException | 
コレクションは固定サイズです。
ここに問題がありそうです、調べてみると、
配列を宣言する時に、 @()strong>@()</strongで作ったのを覚えていますか?
@()strong>@()</strongで配列を宣言してしまうと、サイズが固定長の配列として作られてしまうのです。
これはいわゆる、イミュータブルな配列といえそうですね。
Pythonでいう、タプル(tuple)に近いかもしれません。
※完全にタプルではないです、PowerShellの配列の場合
値の変更は可能です。タプルは更新が不可能。
例) 配列変数testのインデックス1番目の値を”Bacon”に変更します。
| 1 | $test[1] = "Bacon" | 
この変更はできてしまいます。
固定サイズかどうかの確認
言葉だけでは、本当に@()で宣言した配列が固定サイズなのかわからないので
以下のメソッドを利用して、確認をしてみます。
IsFixedSizeメソッドでは、固定サイズか否かを判定し、
True/Falseで結果を返してくれます。
例) 配列変数testが固定サイズかどうか確認します。
| 1 2 | $test.IsFixedSize # True | 
可変長の配列を作る
それでは値を追加するには、固定長ではない配列を作る必要があります。
固定長ではない配列を可変長の配列といいます。
可変長の配列を作るには、
| 1 | $sample = New-Object System.Collections.Generic.List[string] | 
作成した配列に値を追加していきます。
| 1 2 3 | $sample.add("Apple") $sample.add("Orange") $sample.add("Bacon") | 
配列変数sampleを確認してみると、
| 1 2 3 4 | $sample # Apple # Orange # Bacon | 
例外が発生することなく、配列変数sampleに値を追加でき、
ちゃんと格納されているのも確認できました。
 
まとめ
