哈希表(Hash)的应用

时间:2022-02-13 18:19:03

$hs=@() #定义数组

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

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

 $hs = @'
张三

12岁
'@

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

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

 #新建Hash表
$rs=@{ Name="Lily";score=90 ; Age=20 }
$rs $rs = @{}
$rs.name="Lily"
$rs.score=90
$rs #添加键值
$rs.age=20
$rs #删除键值
$rs.remove("age")
$rs

Hash表嵌套:

 $infors = @{}
$infors.pc1=@{cpu='intel';
mem='4GB'} $infors.pc2=@{cpu='amd';
mem='2GB'}
$infors.pc2.cpu #取pc1的值
$infors.pc1
$infors["pc1"]

取Hash表中的值:

哈希表(Hash)的应用

遍历Hash表:

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

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

遍历Hash表:

 #方法一:
foreach($obj in $hash.Keys)
{
$obj
$hash[$obj]
} #方法二:
foreach($obj in $hash)
{
$obj.GetEnumerator()|%{$_.name;$_.value}
} #方法三(复制到数组):
$array=New-Object System.Object[] -ArgumentList $hash.Count
$hash.CopyTo($array,0)
$array

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

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

文件cc.txt内容如下:

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

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

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

结果如下:

哈希表(Hash)的应用

通过 group-object 对成绩分组:

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

哈希表(Hash)的应用

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

$hs.contains()

哈希表(Hash)的应用

格式化输出:

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

哈希表(Hash)的应用

#将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表