迭代哈希中的元素并更新其值
Iterate over elements in hash and updating its values
一开始我把所有的hash值都设置为null。
当哈希中的名称等于某个名称时,哈希值应设置为 1.
但是,我得到一个错误
collection was modified, enumeration may not execute
这真的很愚蠢,因为我没有更改键的值。有什么想法吗?
$Fieldlist = @{
"Brand Name" = 0;
"Product Type" = 0
}
# Loops thru an array
$ArrayOfNames = ("Name1", "Name2", ... ,"Brand Name" ...)
foreach ($FieldName in $Fieldlist.Keys) {
$Message = $FieldName + " -eq " + $ColName + " ?"
Write-Host $Message
if ($FieldName -eq $ColName) {
Write-Host "-------> Yes, bingo"
$Fieldlist.$FieldName = 1
}
}
颠倒你的逻辑。而不是迭代哈希表的键并将它们与 $ArrayOfNames
中的值进行比较(我想这就是 $ColName
的来源)迭代名称数组并在更改之前检查哈希表是否包含该键值:
foreach ($FieldName in $ArrayOfNames) {
if ($Fieldlist.ContainsKey($FieldName)) {
$Fieldlist.$FieldName = 1
}
}
一开始我把所有的hash值都设置为null。 当哈希中的名称等于某个名称时,哈希值应设置为 1.
但是,我得到一个错误
collection was modified, enumeration may not execute
这真的很愚蠢,因为我没有更改键的值。有什么想法吗?
$Fieldlist = @{
"Brand Name" = 0;
"Product Type" = 0
}
# Loops thru an array
$ArrayOfNames = ("Name1", "Name2", ... ,"Brand Name" ...)
foreach ($FieldName in $Fieldlist.Keys) {
$Message = $FieldName + " -eq " + $ColName + " ?"
Write-Host $Message
if ($FieldName -eq $ColName) {
Write-Host "-------> Yes, bingo"
$Fieldlist.$FieldName = 1
}
}
颠倒你的逻辑。而不是迭代哈希表的键并将它们与 $ArrayOfNames
中的值进行比较(我想这就是 $ColName
的来源)迭代名称数组并在更改之前检查哈希表是否包含该键值:
foreach ($FieldName in $ArrayOfNames) {
if ($Fieldlist.ContainsKey($FieldName)) {
$Fieldlist.$FieldName = 1
}
}