共用方式為


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,分別取得索引鍵和相關聯的值。

指定一或多個索引鍵時,可以透過哈希表下標運算符 [] 存取對應的值(7.1.4.3)。

所有哈希表都有類型 Hashtable•4.3.3)。

未指定 Keys 所傳回之集合中的索引鍵順序;不過,其順序與 Values 所傳回之集合中的相關聯值順序相同。

以下是一些涉及哈希表的範例:

$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

Hashtable 項目會儲存在 DictionaryEntry類型的物件中,而由 Keys 和 Values 所傳回的集合具有類型 ICollection

10.2 建立哈希表

Hashtable 是透過哈希常值 (•7.1.9) 或 New-Object Cmdlet 來建立。 可以用零個或多個元素來創建它。 Count 屬性會傳回目前的元素數量。

10.3 新增和移除Hashtable元素

為了將一個元素加入至 Hashtable,可以藉由將值指派給不存在的索引鍵名稱(§7.11.1),或者使用不存在索引鍵名稱的下標(§7.1.4.3)。 移除元素需要使用「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 屬性來擷取索引鍵清單作為陣列,然後列舉該陣列的元素,透過 Value 屬性或下標取得相關聯的值,如下所示。

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