[英]Powershell Group Array of Hashes with Duplicates
我有以下數據集[哈希數組]:
假設ID
始終是唯一的
$dataset = @(
@{
ID = "1234567891"
Code = "ABC1111"
},
@{
ID = "1234567892"
Code = "ABC1111"
},
@{
ID = "1234567893"
Code = "ABC1112"
},
@{
ID = "1234567894"
Code = "ABC1113"
},
@{
ID = "1234567895"
Code = "ABC1114"
},
@{
ID = "1234567896"
Code = "ABC1111"
}
)
我想要做的是按Code
鍵對以下數據集進行分組。
我已經嘗試了多種方法,例如管道Group-By
, Group-Object
, Sort-Object
但我仍然沒有得到我想要的結果。
我希望返回的結果是一個哈希表,看起來像[或類似的東西]:
$groupedDataset = @{
ABC1111 = @("1234567891","1234567892","1234567896")
ABC1112 = @("1234567893")
ABC1113 = @("1234567894")
ABC1114 = @("1234567895")
}
將哈希表轉換為PSCustomObjects,對其進行分組,然后將其分配給新的哈希表:
$groupedDataset = @{}
$dataset |
ForEach-Object { [PSCustomObject]$_ } |
Group-Object -Property Code |
ForEach-Object { $groupedDataset[$_.Name] = $_.Group.ID }
有關使用[PSCustomObject]
從哈希表創建自定義對象的更多信息,請參閱Get-Help about_Object_Creation
。
補充培根比特的有用答案 :
沒有嚴格要求提供自定義對象作為Group-Object
輸入; [hashtable]
實例可以按原樣使用,只要您使用script-block參數來訪問要分組的條目(PSv3 +語法):
$ht = @{}
$dataset | Group-Object { $_.Code } | ForEach-Object { $ht[$_.Name] = $_.Group.Id }
注意使用{ $_.Code }
[-Property] Code
{ $_.Code }
代替[-Property] Code
; 后者僅適用於真正的屬性 (與哈希表條目相反;相反, { $_.Code }
適用於任一情況,但Code
(如果適用)更快)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.