哈希表存放的是对,在哈希表中不再仅仅限制使用数字寻址,可以使用任意类型的数据类型寻址。

创建哈希表

之前使用@()创建数组,现在使用@{}创建哈希表,使用哈希表的键访问对应的值。

  1. PS C:Powershell> $stu=@{ Name = "小明";Age="12";sex="男" }
  2. PS C:Powershell> $stu
  3. Name Value
  4. ---- -----
  5. Name 小明
  6. Age 12
  7. sex
  8. PS C:Powershell> $stu["Name"]
  9. 小明
  10. PS C:Powershell> $stu["age"]
  11. 12
  12. PS C:Powershell> $stu.Count
  13. 3
  14. PS C:Powershell> $stu.Keys
  15. Name
  16. Age
  17. sex
  18. PS C:Powershell> $stu.Values
  19. 小明
  20. 12

在哈希表中存储数组

可以在创建哈希表时就使用数组,因为创建数组和哈希表的的元素关键字不冲突。一个是逗号,一个是分号。

  1. PS C:Powershell> $stu=@{ Name = "小明";Age="12";sex="男";Books="三国演义","围城","哈姆雷特" }
  2. PS C:Powershell> $stu
  3. Name Value
  4. ---- -----
  5. Books {三国演义, 围城, 哈姆雷特}
  6. Name 小明
  7. Age 12
  8. sex

在哈希表中插入新的键值

在哈希表中插入新的键值很方便,象定义变量一样,可以直接拿来使用

  1. PS C:Powershell> $Student=@{}
  2. PS C:Powershell> $Student.Name="令狐冲"
  3. PS C:Powershell> $Student.School="华山派"
  4. PS C:Powershell> $Student
  5. Name Value
  6. ---- -----
  7. Name 令狐冲
  8. School 华山派

哈希表值的更新和删除

如果要更新键的值,可以直接重写。如果要删除这个键值对,可以使用Remove方法,参数为Key

  1. PS C:Powershell> $stu
  2. Name Value
  3. ---- -----
  4. Books {三国演义, 围城, 哈姆雷特}
  5. Name 小明
  6. Age 12
  7. sex
  8. PS C:Powershell> $stu.Name="赵强"
  9. PS C:Powershell> $stu.Name
  10. 赵强
  11. PS C:Powershell> $stu.Remove("Name")
  12. PS C:Powershell> $stu
  13. Name Value
  14. ---- -----
  15. Books {三国演义, 围城, 哈姆雷特}
  16. Age 12
  17. sex

使用哈希表格式化输出

在Powershell中哈希表的一个有趣的应用可以用来格式化文本输出。Powershell许多命令的输出结果都是以表格的形式,当然可以使用Format-Table自定义表格格式,例如:

  1. PS C:Powershell> Dir | Format-Table
  2. Directory: C:Powershell
  3. Mode LastWriteTime Length Name
  4. ---- ------------- ------ ----
  5. d---- 2011/11/23 17:25 ABC
  6. d---- 2011/11/29 18:21 myscript
  7. PS C:Powershell> Dir | Format-Table FullName,Mode
  8. FullName Mode
  9. -------- ----
  10. C:PowershellABC d----
  11. C:Powershellmyscript d----
  12. C:Powershella.html -a---

上述的命令只能限制表格输出那些列,隐藏那些列。但是对于列的宽度,列标题无能为力,但是有了哈希表就可以实现更多自定义了。
表格的每一个列包含四个属性:

Expression 绑定的表达式
Width 列宽度
Label 列标题
Alignment 列的对齐方式

  1. PS C:Powershell> $column1 = @{expression="Name"; width=30;label="filename"; alignment="left"}
  2. PS C:Powershell> $column2 = @{expression="LastWriteTime"; width=40;label="last modification"; alignment="right"}
  3. PS C:Powershell> ls | Format-Table $column1, $column2
  4. filename last modification
  5. -------- -----------------
  6. ABC 2011/11/23 17:25:53
  7. myscript 2011/11/29 18:21:28
  8. a.html 2011/11/24 18:30:13