PowerShellでハッシュテーブルを自在に操る方法と実践演習

PowerShellは、オブジェクトベースのスクリプト言語であり、効率的にデータを管理・操作できる機能が豊富に備わっています。

その中でもハッシュテーブル(HashTable)は、キーと値のペアを管理する非常に便利なデータ構造です。

プログラム内でデータを整理したり、複雑なデータを簡潔に保持したりする場面で、ハッシュテーブルは強力な武器になります。

本記事では、PowerShellのハッシュテーブルの基本的な使い方から応用的な操作までを詳しく解説し、学んだ内容を活用するための演習問題もご用意します。


ハッシュテーブルの基本構造

ハッシュテーブルの作成

ハッシュテーブルは、キーと値のペアをカンマで区切り、@{}の中に定義することで簡単に作成できます。

$hashTable = @{
    "Name" = "Taro"
    "Age" = 25
    "Country" = "Japan"
}

上記の例では、”Name”、”Age”、”Country”がキーであり、それぞれに対応する値が”Taro”、25、”Japan”です。

このようにハッシュテーブルは、キーと値の組み合わせを使って、複数のデータを1つのオブジェクトとして扱うことができます。

キーと値の取得

ハッシュテーブルから特定のキーの値を取得するには、次のようにキーを指定します。

$hashTable["Name"]

上記のコードは、”Taro”という値を返します。

存在しないキーを指定すると、結果は空($null)になります。

$hashTable["City"]  # 存在しないキー

キーと値の追加

ハッシュテーブルに新しいキーと値を追加する場合は、次のようにします。

$hashTable["City"] = "Tokyo"

これにより、”City”というキーと”Tokyo”という値がハッシュテーブルに追加されます。

キーと値の削除

キーと値のペアを削除するには、Remove()メソッドを使います。

$hashTable.Remove("Age")

これにより、”Age”キーとその値が削除されます。


ハッシュテーブルの応用操作

ハッシュテーブルのループ処理

ハッシュテーブル内のすべてのキーと値をループで処理するには、ForEach-Objectを使います。

GetEnumerator()メソッドを使用することで、ハッシュテーブル内のキーと値を一度に取得できます。

$hashTable.GetEnumerator() | ForEach-Object {
    Write-Host "Key: $_.Key, Value: $_.Value"
}

これにより、すべてのキーとその値が出力されます。

キーと値の存在確認

指定したキーがハッシュテーブルに存在するかどうかを確認するには、ContainsKey()メソッドを使用します。

$hashTable.ContainsKey("Name")  # True が返される

同様に、指定した値が存在するか確認するには、ContainsValue()メソッドを使います。

$hashTable.ContainsValue("Taro")  # True が返される

値の上書きとクリア

すでに存在するキーに対して新しい値を割り当てると、その値は上書きされます。

$hashTable["Name"] = "Hanako"

これにより、”Name”キーの値は”Hanako”に変更されます。

ハッシュテーブルの全てのデータをクリアするには、Clear()メソッドを使用します。

$hashTable.Clear()

これでハッシュテーブル内の全てのキーと値が削除され、空の状態になります。


ハッシュテーブルのネスト

ハッシュテーブルは他のハッシュテーブルを値として持つこともできます。

これを「ネスト」と呼びます。

例えば、次のように複雑なデータ構造を持たせることが可能です。

$person = @{
    "Name" = "Taro"
    "Details" = @{
        "Age" = 25
        "Country" = "Japan"
    }
}

ネストされたハッシュテーブルから値を取得するには、キーを2回指定します。

$person["Details"]["Age"]  # 25 が返される

演習問題

問題1: 基本的なハッシュテーブル操作

次の要件を満たすハッシュテーブルを作成し、指定された操作を実行してください。

  1. 名前(Name)、年齢(Age)、国(Country)をキーとしたハッシュテーブルを作成する。
  2. 名前を”Yuki”、年齢を30、国を”Japan”として設定する。
  3. ハッシュテーブルから名前を取得して表示する。
  4. 年齢の値を35に変更する。
  5. 国のキーを削除する。
  6. 最終的なハッシュテーブルの内容を全て表示する。
解答例
# 1. ハッシュテーブルの作成
$person = @{
    "Name" = "Yuki"
    "Age" = 30
    "Country" = "Japan"
}

# 2. 名前を取得して表示
Write-Host "Name: $($person['Name'])"

# 3. 年齢の値を変更
$person["Age"] = 35

# 4. 国のキーを削除
$person.Remove("Country")

# 5. 最終的なハッシュテーブルの内容を表示
$person.GetEnumerator() | ForEach-Object {
    Write-Host "Key: $_.Key, Value: $_.Value"
}

問題2: ネストされたハッシュテーブル操作

次のネストされたハッシュテーブルを操作してください。

  1. 名前(Name)と、詳細(Details)として年齢(Age)、住んでいる都市(City)を含むハッシュテーブルを作成する。
  2. 名前を”Akira”、年齢を40、都市を”Osaka”として設定する。
  3. 都市を”Kyoto”に変更する。
  4. ハッシュテーブル全体をループして、すべてのキーと値を表示する。
解答例
# 1. ネストされたハッシュテーブルの作成
$person = @{
    "Name" = "Akira"
    "Details" = @{
        "Age" = 40
        "City" = "Osaka"
    }
}

# 2. 都市の変更
$person["Details"]["City"] = "Kyoto"

# 3. 全体をループして表示
$person.GetEnumerator() | ForEach-Object {
    if ($_.Value -is [hashtable]) {
        $_.Value.GetEnumerator() | ForEach-Object {
            Write-Host "Sub Key: $_.Key, Sub Value: $_.Value"
        }
    } else {
        Write-Host "Key: $_.Key, Value: $_.Value"
    }
}

まとめ

PowerShellのハッシュテーブルは、複雑なデータを簡潔に整理し、迅速にアクセスできる便利なデータ構造です。

基本的な操作から応用まで、ハッシュテーブルを使いこなせるようになると、スクリプト作成の幅が大きく広がります。

本記事で紹介した操作を参考に、ぜひPowerShellのハッシュテーブルを使ってみてください。