gpt4 book ai didi

powershell - 无法从哈希表中删除项目

转载 作者:行者123 更新时间:2023-12-03 16:27:30 26 4
gpt4 key购买 nike

在 Powershell 中,我有一个哈希表,其中包含与此类似的数据 -

Name                   Value                                           
---- -----
1-update.bat 1
2-update.bat 2
3-update.bat 3
3.1-update.bat 3.1
4-update.bat 4

我还有一个包含数字的变量,例如 3

我想做的是遍历数组并删除值小于或等于 3

的任何条目

我想这会很容易,尤其是 the docs假设有表包含 .remove 方法。但是,我下面的代码失败了,产生了这个错误-

Exception calling "Remove" with "1" argument(s): "Collection was of a fixed size."

这是我使用的代码-

$versions = @{}
$updateFiles | ForEach-Object {
$versions.Add($_.name, [decimal]($_.name -split '-')[0])
}

[decimal]$lastUpdate = Get-Content $directory\$updatesFile

$versions | ForEach-Object {
if ( $_.Value -le $lastUpdate ) {
$versions.Remove($version.Name)
}
}

我首先尝试以不同的方式循环 $versions,同时尝试了 foreachfor 方法,但都以相同的方式失败了方式。

我还尝试创建一个临时数组来保存要删除的版本的名称,然后循环该数组以删除它们,但这也失败了。

接下来,我点击了 Google,虽然我可以找到几个类似的问题,但没有一个能回答我的具体问题。大多数情况下,他们建议使用列表 (New-Object System.Collections.Generic.List[System.Object]),据我所知这对我没有帮助。

有人能提出修复建议吗?

最佳答案

好了,您可以使用 .Remove(),您只需要哈希表的一个克隆,这样它就可以让您在枚举时删除项目。

[hashtable]$ht = @{ '1-update.bat'=1;'2-update.bat'=2;'3-update.bat'=3;'3.1-update.bat'=3.1; '4-update.bat'=4    }

#Clone so that we can remove items as we're enumerating
$ht2 = $ht.Clone()
foreach($k in $ht.GetEnumerator()){
if([decimal]$k.Value -le 3){
#notice, deleting from clone, then return clone at the end
$ht2.Remove($k.Key)
}
}


$ht2

请注意,我也转换了原始变量,因此它是一个明确的哈希表,可能不是必需的,但我喜欢这样做至少让事情变得清晰。

关于powershell - 无法从哈希表中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40893111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com