哈希表(Hash)的应用

$hs=@() #定义数组

$hs=@{} #定义Hash表,使用哈希表的键可以直接访问对应的值,如 $hs["王五"] 或者 $hs.王五 的值为 75

$hs=@''@ #定义文本字符串

1 $hs = @'
2 张三
3 4 12岁
5 '@

################################

Hash表的新建、修改、删除:

 1 #新建Hash表
 2 $rs=@{ Name="Lily";score=90 ; Age=20 }
 3 $rs
 4 
 5 $rs = @{}
 6 $rs.name="Lily"
 7 $rs.score=90
 8 $rs
 9 
10 #添加键值
11 $rs.age=20
12 $rs
13 
14 #删除键值
15 $rs.remove("age")
16 $rs

Hash表嵌套:

 1 $infors = @{}
 2 $infors.pc1=@{cpu='intel';
 3         mem='4GB'}
 4         
 5 $infors.pc2=@{cpu='amd';
 6         mem='2GB'} 
 7         $infors.pc2.cpu
 8 
 9 #取pc1的值        
10 $infors.pc1
11 $infors["pc1"]

取Hash表中的值:

遍历Hash表:

Hash表中的内容不能直接被当做对象来使用,需要进行转换

1 #定义Hash表
2 $hash=@{"name"="ff"}
3 $hash.Add("dd","fffff")

遍历Hash表:

 1 #方法一:
 2 foreach($obj in $hash.Keys)
 3 {
 4     $obj
 5     $hash[$obj]
 6 }
 7 
 8 #方法二:
 9 foreach($obj in $hash)
10 {
11     $obj.GetEnumerator()|%{$_.name;$_.value}
12 }
13 
14 #方法三(复制到数组):
15 $array=New-Object System.Object[] -ArgumentList $hash.Count
16 $hash.CopyTo($array,0)
17 $array

################################

举例:使用Hash表取出分数相同的学生

文件cc.txt内容如下:

李一 93
王二 83
王三 93
李四 60
王五 75
马六 61
孙七 75
刘八 75

将文件cc.txt中的内容保存到Hash表中:

1 $hs=@{}
2 Get-Content d:cc.txt | ForEach-Object {
3 $line = $_ -split " "
4  $hs[$line[0]]= $line[1]
5 }
6 $hs

结果如下:

通过 group-object 对成绩分组:

1  $hs|%{$_.getenumerator()|group value|?{$_.count -gt 1}|%{$_.group}}

判断Hash表中是否存在某个值:

$hs.contains()

格式化输出:

1 #改变列标题为Name,所有ProcessName输出为大写格式,下面两种写法输出结果相同:
2 get-process|select id,@{Label="Name";Expression={@($_.Processname.toupper())}}|ft -AutoSize
3 get-process|select id,@{Label="Name";Expression={$_.Processname.toupper()}}|ft -AutoSize

#将ProcessName列标题名称改为Name
get-process|select id,@{Label="Name";Expression="ProcessName"}

参考:http://www.pstips.net/powershell-using-hash-tables.html #创建Hash表

     http://www.pstips.net/powershell-convert-hashtable-to-object.html #将Hash表转换为对象

     http://www.cnblogs.com/fmyuan2000/archive/2010/04/22/1717952.html #遍历Hash表

原文地址:https://www.cnblogs.com/dreamer-fish/p/4166969.html