次の方法で共有


10. ハッシュテーブル

編集メモ

重要

Windows PowerShell 言語仕様 3.0 は、2012 年 12 月に公開され、Windows PowerShell 3.0 に基づいています。 この仕様では、PowerShell の現在の状態は反映されません。 現在の状態を反映するようにこのドキュメントを更新する予定はありません。 このドキュメントは、履歴参照のためにここに示されています。

仕様文書は、Microsoft ダウンロード センターから Microsoft Word 文書として入手できます。https://www.microsoft.com/download/details.aspx?id=36389 Word 文書は、Microsoft Learn でプレゼンテーション用に変換されています。 変換中に、Docs プラットフォームの書式設定に対応するために、いくつかの編集の変更が行われました。 一部の入力ミスと軽微なエラーが修正されました。

構文:

ヒント

構文定義の ~opt~ 表記は、構文エンティティが構文で省略可能であることを示します。

hash-literal-expression:
    @{ new-lines~opt~ hash-literal-body~opt~ new-lines~opt~ }

hash-literal-body:
    hash-entry
    hash-literal-body statement-terminators hash-entry

hash-entry:
    key-expression = new-lines~opt~ statement

key-expression:
    simple-name
    unary-expression

statement-terminator:
    ;
    new-line-character

10.1 概要

型 Hashtable は、キー によってインデックスされた際に、値を効率的に取得できるキーと値のペア オブジェクトのコレクションを表します。 各キーと値のペアは 要素であり、実装で定義されたオブジェクト型に格納されます。

要素のキーを null 値にすることはできません。 キーまたは値の種類に制限はありません。 重複するキーはサポートされていません。

キーと値のペア オブジェクトを指定すると、インスタンス プロパティ Key と Value をそれぞれ使用して、キーと関連する値を取得できます。

1 つ以上のキーを指定すると、対応する値に Hashtable 添字演算子 [] (§7.1.4.3) を使用してアクセスできます。

すべてのハッシュテーブルの型は Hashtable です (§4.3.3)。

Keys によって返されるコレクション内のキーの順序は指定されていません。ただし、値によって返されるコレクション内の関連付けられている値と同じ順序です。

ハッシュテーブルに関連するいくつかの例を次に示します。

$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123 }
$h1.FirstName # designates the key FirstName
$h1["LastName"] # designates the associated value for key LastName
$h1.Keys # gets the collection of keys

要素は、DictionaryEntry型のオブジェクトに格納され、Keys および Values によって返されるコレクションには ICollection型があります。

10.2 ハッシュテーブルの作成

は、ハッシュ リテラル (§7.1.9) または New-Object コマンドレットを使用して作成されます。 要素がゼロ個でもしくはそれ以上でも作成できます。 Count プロパティは、現在の要素数を返します。

10.3 Hashtable 要素の追加と削除

要素を Hashtable に追加するには、存在しないキー名に値を割り当てるか、存在しないキー名を使用する添字 (§7.1.4.3) に値を割り当てます (§7.11.1)。 要素を削除するには、Remove メソッドを使用する必要があります。 例えば

$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123 }
$h1.Dept = "Finance" # adds element Finance
$h1["Salaried"] = $false # adds element Salaried
$h1.Remove("Salaried") # removes element Salaried

10.4 ハッシュテーブル連結

ハッシュテーブルは、+ 演算子と += 演算子を使用して連結でき、どちらも新しい Hashtableが作成されます。 既存のハッシュテーブルは変更されません。 詳細については、§7.7.4 を参照してください。

10.5 参照型としてのハッシュテーブル

Hashtable は参照型であるため、Hashtable の割り当てには浅いコピーが含まれます。つまり、割り当てられた変数は同じ Hashtableを参照します。Hashtable のコピーは作成されません。 例えば

$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123 }
$h2 = $h1
$h1.FirstName = "John" # change key's value in $h1
$h2.FirstName # change is reflected in $h2

10.6 ハッシュテーブルの列挙

Hashtable 内のすべてのペアを処理するには、Keys プロパティを使ってキーの一覧を配列として取得し、次に、その配列の要素を列挙し、[値] プロパティまたは添字を使って関連付けられた値を取得します。次に例を示します。

$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123}
foreach ($e in $h1.Keys) {
   "Key is " + $e + ", Value is " + $h1[$e]
}