随笔 - 911  文章 - 5  评论 - 94  阅读 - 243万

哈希表(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表

 

posted on   momingliu11  阅读(1708)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2013-12-16 逻辑网络(Logical Network)
2013-12-16 Unattend.xml应答文件制作(WISM)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示