如何解决循环遍历哈希表,找到小于数字的值,并将其添加到新的哈希表中
我有一个服务器名称作为键,它的可用空间作为它的值,例如:
$hash= @{}
#in the loop I get the server name and then I get the space as an integer and add it to the table like:
$hash.add($server,$space)
循环完成后,我想遍历列表并使用
将空间小于 80 的服务器添加到不同的表中 $badServers = foreach($entry in $serverSpace){
if($entry.Keys -le 80){
$badServers.add($entry)
}}
但我的输出最终将每个服务器放入 $badServers。就好像这些值实际上并未列出。不知道我做错了什么。
解决方法
假设您的哈希表的值属于 [int]
类型,例如:
PS /> $hash
Name Value
---- -----
SERVER0 93
SERVER1 87
SERVER2 84
SERVER3 92
SERVER4 83
SERVER5 58
SERVER6 95
SERVER7 62
SERVER8 81
SERVER9 84
SERVER10 59
你可以这样做:
$result = foreach($key in $hash.Keys)
{
if($hash[$key] -lt 80)
{
[pscustomobject]@{
Server = $key
Space = $hash[$key]
}
}
}
查看 $result
你会得到这样的结果:
PS /> $result
Server Space
------ -----
SERVER5 58
SERVER7 62
SERVER10 59
如果值存储为 [string]
但保存实际整数,您需要稍微更改条件:
if([int]$hash[$key] -lt 80){ ... }
编辑备注:
实际上,我的缺点是,PowerShell 足够聪明,知道如何将 string
与integer
进行比较。无需投射 [int]
。
并且,例如,如果散列包含 123 Gb
之类的值,即:
PS /> $hash
Name Value
---- -----
SERVER0 94 Gb
SERVER1 80 Gb
SERVER2 82 Gb
SERVER3 89 Gb
...
...
你可以这样做:
if([regex]::Match($hash[$key],'\d+').Value -lt 80){ ... }
哪个会产生:
PS /> $result
Server Space
------ -----
SERVER5 52 Gb
SERVER6 53 Gb
SERVER8 69 Gb
SERVER9 72 Gb
SERVER10 65 Gb
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。