编辑说明
重要
Windows PowerShell 语言规范 3.0 于 2012 年 12 月发布,基于 Windows PowerShell 3.0。 此规范不反映 PowerShell 的当前状态。 没有计划更新本文档以反映当前状态。 此处提供了本文档供历史参考。
该规范文档可以从 Microsoft 下载中心以 Microsoft Word 格式下载:https://www.microsoft.com/download/details.aspx?id=36389。在此 Microsoft Learn 上,该 Word 文档已被转换为适合展示的格式。 转换期间,进行了一些编辑更改,以适应 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 值。 键或值的类型没有限制。 不支持重复键。
给定键/值对对象后,可以使用实例属性键和值分别获取键和关联值。
给定一个或多个键后,可以通过哈希表下标运算符 [](§7.1.4.3)访问相应的值。
所有哈希表都具有类型 Hashtable(§4.3.3)。
键返回的集合中的键顺序未指定;但是,它与 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的对象中,而键和值返回的集合是 ICollection类型。
10.2 创建哈希表
Hashtable 是通过哈希文本 (§7.1.9) 或 New-Object cmdlet 创建的。 可以使用零个或多个元素创建它。 Count 属性返回当前元素计数。
10.3 添加和删除哈希表元素
通过将值分配 (Hashtable) 给不存在的键名称或使用不存在键名称的下标 (§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]
}