我需要將兩個分組物件分組為一個組,請參見示例:
Name Count Group
---- ----- -----
4771343 89 {@{Id=4be956d4-c46e-4456-8666-7a642cc1e8f8;[...]}}
4771342 44 {@{Id=4be956d4-c46e-4456-8666-7a642cc1e8f8;[...]}}
我想將這兩個組合并為一個組,其中包含兩個值,如下所示:
Name Count Group
---- ----- -----
4771343 133 {@{Id=4be956d4-c46e-4456-8666-7a642cc1e8f8;[...]}}
我嘗試的是:
一種。創建一個自定義GroupInfo物件,它沒有建構式,不能手動創建
灣。手動修改組是不可能的,因為它是只讀的
C。所以,我像這樣手動更新物件:
$RelevantGroups = $Groups | ? Name -Match '4771342|4771343'
$TempGroup = $Groups[0]
$field = $TempGroup.GetType().GetField('name','static,nonpublic,instance')
$field.SetValue($TempGroup,"4771343")
$Collection = [System.Collections.ObjectModel.Collection[psobject]]::new()
$Collection.Add($RelevantGroups.Group)
$field = $TempGroup.GetType().GetField('group','static,nonpublic,instance')
$field.SetValue($TempGroup,$Collection)
$field = $TempGroup.GetType().GetField('count','static,nonpublic,instance')
$field.SetValue($TempGroup,133)
但是因為它是一個參考型別,它更新了原始物件,我可以用新物件解決它,但感覺一團糟......
你知道如何實作這一目標嗎?
uj5u.com熱心網友回復:
您只需要分組鍵為兩組輸入物件計算相同的數字,您可以使用如下屬性運算式來執行此操作:
$Groups = $Filtered | Group-Object {
if($_.MpnId -eq 4771342){
4771343
}
else {
$_.MpnId
}
}
如果您有多個這樣的映射,請將它們排列在字典中并使用它來決議分組鍵:
$mapping = @{
'4771342' = '4771343'
'1234567' = '2345678'
}
$Groups = $Filtered | Group-Object {
$idAsString = "$($_.MpnId)"
if($mappings.ContainsKey($idAsString)){
$mappings[$idAsString]
}
else {
$idAsString
}
}
我對 ID 值進行“字串化”的原因是為了避免型別混淆,以防萬一MpnId包含不同型別的整數值[int](在這種情況下,ContainsKey()對于相同的兩個值,呼叫可能會失敗)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/474184.html
標籤:电源外壳
上一篇:將嵌套哈希表添加到Powershell中的陣列時出錯
下一篇:合并2個腳本
