Lesson 7

配列

Lesson 7 Chapter 1
配列

「配列」とは、複数の値を1つの変数にまとめて入れることができるデータの構造のことです。例えば、1,2,3という数字を全部まとめて一つの配列にすることができます。配列を使うことで、まとめて処理ができるため、同じ種類のデータをまとめて管理したい場合に使われます。

配列には、要素と呼ばれる中身があり、それらをインデックス番号と呼ばれる番号で指定することができます。例えば、1番目の要素はインデックス番号0、2番目の要素はインデックス番号1、というように番号を振ることができます。また、新しい要素を追加したり、いらない要素を削除したりすることもできます。

PowerShellで配列を使うと、処理の効率が良くなります。つまり、同じ種類のデータをまとめて管理することで、作業を早く終わらせることができます。

Lesson 7 Chapter 2
配列の作成

PowerShellで配列を作成する方法はいくつかありますが、基本的な方法は以下の通りです。

値をカンマで区切って括弧で囲む方法

powershell
$myArray = @(1, 2, 3, 4, 5)

上記の例では、1から5までの数字を要素として持つ配列を作成しています。変数名は$myArrayですが、自分で好きな名前をつけることができます。

初期値を指定せずに空の配列を作成する方法

powershell
$myArray = @()

上記の例では、空の配列を作成しています。この方法で作成した配列には、後から要素を追加することができます。

New-Objectコマンドレットを使う方法

powershell
$myArray = New-Object System.Collections.ArrayList

上記の例では、System.Collections.ArrayListクラスを使って配列を作成しています。この方法は、長さやサイズが固定ではなく、プログラムの実行時に増減することができる可変長の配列を作成する場合に便利です。

以上が、PowerShellで配列を作成する基本的な方法です。配列を作成する方法は他にもありますが、これらの方法を覚えておけば基本的な配列操作はできます。

Lesson 7 Chapter 3
配列の明示的な型宣言

PowerShellでは、変数に格納される値の型を自動的に判断する「動的型付け」が採用されています。しかし、明示的に配列の要素の型を指定することも可能です。

以下に、PowerShellで配列の明示的な型宣言をする方法の例を挙げます。

  1. 配列の要素の型を指定して作成する
    powershell
    [int[]]$myArray = @(1, 2, 3, 4, 5)

    上記の例では、配列の要素が整数型であることを明示的に指定しています。

  2. 既存の配列変数に要素の型を指定する
    powershell
    $myArray = @(1, 2, 3, 4, 5)
    $myArray = [int[]]$myArray

    上記の例では、既に作成された配列変数$myArrayに対して、要素の型を整数型に変更しています。

  3. 既存の配列変数に要素の型を指定して新しい配列を作成する
    powershell
    $myArray = @(1, 2, 3, 4, 5)
    $newArray = [int[]]$myArray

    上記の例では、既存の配列の変数$myArrayに対して、要素の型を整数型に変更した新しい配列変数$newArrayを作成しています。

以上が、PowerShellで配列の明示的な型宣言をする方法の例です。配列の要素の型を明示的に指定することで、変数の型が混在する場合に型エラーを防止することができます。

Lesson 7 Chapter 4
配列要素のアクセス

PowerShellでは、配列の要素にアクセスする方法は以下の通りです。

  1. インデックスを指定してアクセスする方法
    powershell
    $myArray = @(1, 2, 3, 4, 5)
    $myArray[0]   # 1を表示する

    上記の例では、$myArray変数の最初の要素にアクセスしています。インデックスは0から始まります。

  2. 複数の要素にアクセスする方法
    powershell
    $myArray = @(1, 2, 3, 4, 5)
    $myArray[1..3]   # 2, 3, 4を表示する

    上記の例では、$myArray変数の2番目から4番目の要素にアクセスしています。

  3. 最後の要素にアクセスする方法
    powershell
    $myArray = @(1, 2, 3, 4, 5)
    $myArray[-1]   # 5を表示する

    上記の例では、$myArray変数の最後の要素にアクセスしています。インデックスをマイナスにすることで、後ろから数えた要素の位置にアクセスできます。

  4. 要素の値を更新する方法
    powershell
    $myArray = @(1, 2, 3, 4, 5)
    $myArray[0] = 10   # 最初の要素を10に更新する

    上記の例では、$myArray変数の最初の要素を10に更新しています。

以上が、PowerShellで配列の要素にアクセスする方法です。配列の要素にアクセスすることで、配列に格納された値を取り出したり、更新したりすることができます。

Lesson 7 Chapter 5
配列の長さと要素

PowerShellでは、配列の長さや要素を取得する方法は以下の通りです。

  1. 配列の長さを取得する方法
    powershell
    $myArray = @(1, 2, 3, 4, 5)
    $myArray.Length   # 5を表示する

    上記の例では、$myArray変数の長さを取得しています。Lengthプロパティを使用することで、配列の要素数を取得できます。

  2. 配列の最後の要素を取得する方法
    powershell
    $myArray = @(1, 2, 3, 4, 5)
    $myArray[-1]   # 5を表示する

    上記の例では、$myArray変数の最後の要素を取得しています。配列の最後の要素にアクセスすることで、配列の長さを取得することもできます。

  3. 配列の要素をすべて取得する方法
    powershell
    $myArray = @(1, 2, 3, 4, 5)
    $myArray   # 配列の要素をすべて表示する

    上記の例では、$myArray変数に格納された配列の要素をすべて取得しています。

  4. 配列の要素を逆順に取得する方法
    powershell
    $myArray = @(1, 2, 3, 4, 5)
    $myArray[-1..-5]   # 5, 4, 3, 2, 1を表示する

    上記の例では、$myArray変数に格納された配列の要素を逆順に取得しています。配列の要素を逆順に取得することで、配列の最後の要素から順にアクセスすることもできます。

以上が、PowerShellで配列の長さや要素を取得する方法です。配列の長さや要素を取得することで、配列に格納された値の数や値そのものを取得することができます。

Lesson 7 Chapter 6
配列の結合

PowerShellでは、配列を結合する(一つの配列にする)方法がいくつかあります。

`+` 演算子を使って配列を結合する方法

powershell
$myArray1 = @(1, 2, 3)
$myArray2 = @(4, 5, 6)
$myArray3 = $myArray1 + $myArray2
$myArray3   # 1, 2, 3, 4, 5, 6 を表示する

上記の例では、+ 演算子を使用して $myArray1 と $myArray2 を結合し、 $myArray3 変数に代入しています。 $myArray3 を表示することで、 $myArray1 と $myArray2 を結合した結果を取得できます。

`+=` 演算子を使って配列を結合する方法

powershell
$myArray1 = @(1, 2, 3)
$myArray2 = @(4, 5, 6)
$myArray1 += $myArray2
$myArray1   # 1, 2, 3, 4, 5, 6 を表示する

上記の例では、+= 演算子を使用して $myArray1 に $myArray2 を結合しています。 $myArray1 を表示することで、 $myArray1 と $myArray2 を結合した結果を取得できます。

`@()` を使って配列を結合する方法

powershell
$myArray1 = @(1, 2, 3)
$myArray2 = @(4, 5, 6)
$myArray3 = @($myArray1, $myArray2)
$myArray3   # 1, 2, 3, 4, 5, 6 を表示する

上記の例では、@() を使用して $myArray1 と $myArray2 を配列に格納し、$myArray3 変数に代入しています。 $myArray3 を表示することで、 $myArray1 と $myArray2 を結合した結果を取得できます。

上記のように、PowerShellではいくつかの方法で配列を結合することができます。 配列を結合することで、複数の配列を一つの配列にまとめて扱うことができます。

Lesson 7 Chapter 7
配列のコンソール表示

PowerShellで配列をコンソールに表示する方法について説明します。

まず、配列を定義します。以下は、整数値を要素とする配列を定義する例です。

powershell
$numbers = 1, 2, 3, 4, 5

配列をコンソールに表示するには、以下のようにWrite-Hostコマンドレットを使います。

powershell
Write-Host $numbers

上記のコマンドを実行すると、以下のようにコンソールに配列が表示されます。

powershell
1 2 3 4 5

配列の要素を改行して表示するには、ForEach-Objectコマンドレットを使います。

powershell
$numbers | ForEach-Object { Write-Host $_ }

上記のコマンドを実行すると、以下のようにコンソールに配列の要素が改行して表示されます。

powershell
1
2
3
4
5

また、配列のインデックスを含めて表示するには、ForEach-Objectコマンドレットの-Indexパラメータを使います。

powershell
$numbers | ForEach-Object -Index { Write-Host "$($_.Index): $($_.Value)" }

上記のコマンドを実行すると、以下のようにコンソールに配列のインデックスと要素が表示されます。

powershell
0: 1
1: 2
2: 3
3: 4
4: 5

以上が、PowerShellで配列をコンソールに表示する方法です。

Lesson 7 Chapter 8
連想配列

PowerShellにおける連想配列は、キーと値のペアを格納するデータ構造であり、キーを使って値にアクセスすることができます。具体的には、ある店舗の商品データを連想配列で表現すると、商品名をキーとして、値として価格や在庫数などの情報を格納することができます。このように、キーと値のペアを関連付けて保存することで、検索や処理を行いやすくなります。

連想配列は、PowerShellスクリプトで多く使われるデータ構造の一つであり、PowerShellのモジュールやコマンドレット、また外部システムとの連携など、幅広い用途で活用されます。例えば、あるファイルの内容を読み込んで、各行の単語の出現回数を数える場合には、連想配列を使って、各単語をキーとして、出現回数を値として格納することができます。また、APIから受け取ったJSON形式のデータを、連想配列に変換して扱うこともできます。連想配列は、キーを指定することで要素にアクセスするため、配列よりも柔軟なデータ構造と言えます。

連想配列の作成

PowerShellで連想配列を作成する方法について説明します。

連想配列は、キーと値のペアを格納するデータ構造であり、キーは文字列で指定され、値は任意のデータ型で表現されます。PowerShellでは、@{}という構文を使って、連想配列を作成することができます。

以下は、@{}を使って連想配列を作成する例です。

powershell
$hash = @{
    "key1" = "value1"
    "key2" = 123
    "key3" = Get-Date
}

上記の例では、"key1"、"key2"、"key3"という文字列をキーとして、それぞれ"value1"、123、現在の日時を表すDateTimeオブジェクトを値として、連想配列を作成しています。

連想配列に要素を追加するには、以下のようにキーと値を指定します。

powershell
$hash["key4"] = "value4"

上記の例では、"key4"というキーを追加し、その値として"value4"を設定しています。

以上が、PowerShellで連想配列を作成する方法です。

連想配列の要素へのアクセス

PowerShellにおける連想配列では、キーを指定して要素にアクセスすることができます。以下に、連想配列の要素へのアクセス方法について説明します。

連想配列を定義するには、@{}という構文を使います。例えば、以下のような連想配列を定義することができます。

powershell
$hash = @{
    "key1" = "value1"
    "key2" = "value2"
}

この連想配列にアクセスするには、$hashの後ろにカッコ[]を付け、その中にキーを指定します。以下は、連想配列$hashの"key1"に対応する値を取得する例です。

powershell
$hash["key1"]

上記のコードを実行すると、"value1"という文字列が出力されます。

また、新しいキーと値を連想配列に追加するには、以下のようにします。

powershell
$hash["key3"] = "value3"

上記のコードを実行すると、"key3"という新しいキーと、それに対応する"value3"が連想配列に追加されます。

連想配列の要素にアクセスする場合、存在しないキーを指定するとエラーが発生します。そのため、キーが存在するかどうかを事前にチェックすることが重要です。以下は、キーが存在するかどうかをチェックする方法です。

powershell
if ($hash.ContainsKey("key1")) {
    $value = $hash["key1"]
}

上記のコードでは、ContainsKey()メソッドを使って、"key1"というキーが連想配列に存在するかどうかをチェックしています。$valueには、キーが存在する場合はその値が、存在しない場合は$nullが代入されます。

以上が、PowerShellにおける連想配列の要素へのアクセス方法です。

連想配列の要素の列挙

PowerShellにおける連想配列の要素を列挙するには、foreachループを使います。以下に、連想配列の要素を列挙する方法について説明します。

例えば、以下のような連想配列を定義します。

powershell
$hash = @{
    "key1" = "value1"
    "key2" = "value2"
    "key3" = "value3"
}

この連想配列に対して、foreachループを使ってキーと値を列挙する場合、以下のように記述します。

powershell
foreach ($key in $hash.Keys) {
    $value = $hash[$key]
    Write-Output "$key : $value"
}

上記のコードを実行すると、以下のように出力されます。

powershell
key1 : value1
key2 : value2
key3 : value3

$hash.Keysという式は、連想配列$hashのキーの一覧を取得するために使われます。$keyには、現在のキーが代入され、$valueには現在のキーに対応する値が代入されます。Write-Outputコマンドレットを使って、$keyと$valueを出力しています。

また、foreachループで列挙する際に、キーだけではなく値だけを列挙することもできます。以下は、連想配列$hashの値を列挙する例です。

powershell
foreach ($value in $hash.Values) {
    Write-Output $value
}

上記のコードを実行すると、以下のように出力されます。

powershell
value1
value2
value3

以上が、PowerShellにおける連想配列の要素の列挙方法です。

順序保証した連想配列

PowerShellにおける連想配列は通常、キーと値のペアが順序保証なしで格納されます。しかし、PowerShell 3.0以降では、順序保証した連想配列(Ordered Dictionary)を作成することができます。

順序保証した連想配列は、キーと値のペアを格納するために使用される連想配列であり、要素が追加された順序を記録します。これにより、連想配列の要素が順序付けられ、追加された順序で取得されることが保証されます。

以下は、順序保証した連想配列の作成方法の例です。

powershell
$orderedHash = [ordered]@{
    "key1" = "value1"
    "key2" = "value2"
    "key3" = "value3"
}

上記の例では、[ordered]というキーワードを使って、順序保証した連想配列を定義しています。

順序保証した連想配列に対して、要素を追加する場合は、通常の連想配列と同じようにキーと値を指定します。ただし、順序保証した連想配列では、要素が追加された順序が保持されるため、Add()メソッドを使用することはできません。代わりに、以下のように配列のようにインデックスを指定して要素を追加します。

powershell
$orderedHash["key4"] = "value4"

順序保証した連想配列の要素を列挙する場合は、通常の連想配列と同じくforeachループを使用します。

powershell
foreach ($key in $orderedHash.Keys) {
    $value = $orderedHash[$key]
    Write-Output "$key : $value"
}

順序保証した連想配列は、通常の連想配列よりも少し遅くなる可能性がありますが、要素の順序が重要な場合には有用です。