我有以下数据集[哈希数组]:
假设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")
}
答案 0 :(得分:5)
将哈希表转换为PSCustomObjects,对其进行分组,然后将其分配给新的哈希表:
UPDATE
有关使用$groupedDataset = @{}
$dataset |
ForEach-Object { [PSCustomObject]$_ } |
Group-Object -Property Code |
ForEach-Object { $groupedDataset[$_.Name] = $_.Group.ID }
从哈希表创建自定义对象的详细信息,请参阅Get-Help about_Object_Creation
。
答案 1 :(得分:4)
没有严格要求提供自定义对象作为Group-Object
的输入; [hashtable]
实例可以按原样使用,只要您使用 script-block参数来访问分组依据(PSv3 +语法):
$ht = @{}
$dataset | Group-Object { $_.Code } | ForEach-Object { $ht[$_.Name] = $_.Group.Id }
请注意使用{ $_.Code }
代替[-Property] Code
;后者仅适用于真正的属性(与哈希表条目相对;相反,{ $_.Code }
适用于任一情况,但Code
(如果适用)更快)。