雜湊表(Hash)的應用

weixin_34321977發表於2014-12-16

$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表

 

相關文章