$hs=@() #定義數組html
$hs=@{} #定義Hash表,使用哈希表的鍵能夠直接訪問對應的值,如 $hs["王五"] 或者 $hs.王五 的值爲 75shell
$hs=@''@ #定義文本字符串數組
1 $hs = @' 2 張三 3 男 4 12歲 5 '@
################################spa
Hash表的新建、修改、刪除:.net
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表嵌套:3d
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表中的值:code
遍歷Hash表:htm
Hash表中的內容不能直接被當作對象來使用,須要進行轉換
對象
1 #定義Hash表 2 $hash=@{"name"="ff"} 3 $hash.Add("dd","fffff")
遍歷Hash表:blog
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表