哈希表(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表
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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)