[英]foreach ($key in $map.keys) not behaving as expected
我正在嘗試遍歷 hash map 的每個鍵,對於每個鍵,在 3 個不同的映射中查找它的值,分配給 psCustomObject。 由於某種原因,只經過一次foreach后,resultCase看起來像這樣,並且長度與我在foreach語句中取出Keys的map相同。 每次遍歷 foreach 時,它都會再次填充 69 行,覆蓋它們:
Object[69]
[0]: @{sdkErr=HopResultMap3[seFatal];sdkDesc=HopResultMap2[seFatal];sdkOutErr=HOP_FATAL_ERROR}
[1]:@{sdkErr=HopResultMap3[seInterface];sdkDesc=HopResultMap2[seInterface];sdkOutErr=HOP_INTERFACE}
...
[68]: @{...}
如您所見,它僅解決上述最后一項的 map 查找。
我不確定為什么它沒有在另一個 map 中進行查找,實際上將值放在 $resultCase 中。 它只適用於最后一個,巧合的是,我用於 foreach 的 map。 我設計了這個,所以我可以使用第一個 map 中的密鑰並使用它來查找其他兩個映射中的值。 我在這里需要一個組合的 map,這樣我就可以將代碼重用於具有不同文件結構的東西。
$resultCase = foreach ($key in $HopResultMap.Keys){
[PSCustomObject][ordered]@{
sdkErr = $($HopResultMap3[$key])
sdkDesc = $($HopResultMap2[$key])
sdkOutErr = $($HopResultMap["$($key)"])
}
}
我也用這種方法對 Map2/3 進行了嘗試,但並沒有改變結果:
$($HopResultMap2[$($key)])
and also
$($HopResultMap2["$($key")])
作為參考,地圖如下所示:
跳結果圖:
OrderedDictionary[69]
[0]:@{seFatal,Hop_Fatal_Error}
[1]:@{seInterface,Hop_Interface}
...
跳結果圖2:
OrderedDictionary[69]
[0]:@{seFatal,"Falal error"}
[1]:@{seInterface,"Interface not.."}
...
HopResultMap3 (在第三個中有一點額外的,但額外的有不同的鍵......就像 sc......):
OrderedDictionary[120]
...
[16]:@{seFatal,"0"}
[17]:@{seInterface,"1"}
...
我無法真正更改 psCustomObject 數據結構,因為我還有另一個 model 具有相同的數據結構。 這是 powershell 5.1 和 VSCode。
更新:
3張地圖都是這樣構造的(類似於):
function Get-Contents60{
[cmdletbinding()]
Param ([string]$fileContent)
#m_HopErrorMap.insert(make_pair(
#MAKEWORD(scError,sePaperJam),
#HOP_JAM ));
# create an ordered hashtable to store the results
$errorMap = [ordered]@{}
# process the lines one-by-one
switch -Regex ($fileContent -split '\r?\n') {
'MAKEWORD\([^,]+,([^)]+)\),' { # seJam, seFatal etc.
$key = $matches[1]
}
'(HOP_[^)]+)' {
$errorMap[$key] = $matches[1].Trim()
}
}
return $errorMap
}
Since you are dealing with arrays of hash tables and not with hash tables , referencing by [$key]
will be null, this should likely solve the problem:
$dict1 = @(
@{seFatal = 'Hop_Fatal_Error'}
@{seInterface = 'Hop_Interface'}
)
$dict2 = @(
@{seFatal = "Falal error"}
@{seInterface = "Interface not.."}
)
$dict3 = @(
@{seFatal = "0"}
@{seInterface = "1"}
)
foreach($key in $dict1.Keys)
{
[pscustomobject]@{
sdkErr = $dict3.$key
sdkDesc = $dict2.$key
sdkOutErr = $dict1.$key
}
}
結果將是:
sdkErr sdkDesc sdkOutErr
------ ------- ---------
0 Falal error Hop_Fatal_Error
1 Interface not.. Hop_Interface
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.