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: 基本的なハッシュテーブル操作
次の要件を満たすハッシュテーブルを作成し、指定された操作を実行してください。
- 名前(Name)、年齢(Age)、国(Country)をキーとしたハッシュテーブルを作成する。
- 名前を”Yuki”、年齢を30、国を”Japan”として設定する。
- ハッシュテーブルから名前を取得して表示する。
- 年齢の値を35に変更する。
- 国のキーを削除する。
- 最終的なハッシュテーブルの内容を全て表示する。
解答例
# 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: ネストされたハッシュテーブル操作
次のネストされたハッシュテーブルを操作してください。
- 名前(Name)と、詳細(Details)として年齢(Age)、住んでいる都市(City)を含むハッシュテーブルを作成する。
- 名前を”Akira”、年齢を40、都市を”Osaka”として設定する。
- 都市を”Kyoto”に変更する。
- ハッシュテーブル全体をループして、すべてのキーと値を表示する。
解答例
# 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のハッシュテーブルを使ってみてください。