迭代哈希中的元素并更新其值

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
    }
}