具有重复项的 Powershell 组哈希数组
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
,但我仍然没有得到我想要的结果。
我正在寻找的结果 return 是一个看起来像这样的哈希表 [或类似的东西]:
$groupedDataset = @{
ABC1111 = @("1234567891","1234567892","1234567896")
ABC1112 = @("1234567893")
ABC1113 = @("1234567894")
ABC1114 = @("1234567895")
}
将散列 tables 转换为 PSCustomObjects,将其分组,然后将其分配给新的散列 table:
$groupedDataset = @{}
$dataset |
ForEach-Object { [PSCustomObject]$_ } |
Group-Object -Property Code |
ForEach-Object { $groupedDataset[$_.Name] = $_.Group.ID }
有关使用 [PSCustomObject]
从散列 tables 创建自定义对象的更多信息,请参阅 Get-Help about_Object_Creation
。
补充:
没有严格要求提供自定义对象作为Group-Object
的输入; [hashtable]
实例可以按原样使用,只要您使用 脚本块参数 访问要分组的条目(PSv3+ 语法):
$ht = @{}
$dataset | Group-Object { $_.Code } | ForEach-Object { $ht[$_.Name] = $_.Group.Id }
注意使用 { $_.Code }
代替 [-Property] Code
;后者仅适用于真正的 properties(与哈希表条目相反;相反,然而,{ $_.Code }
在任何一种情况下都有效,尽管 Code
,如果适用,是更快)。
我有以下数据集[哈希数组]:
假设 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
,但我仍然没有得到我想要的结果。
我正在寻找的结果 return 是一个看起来像这样的哈希表 [或类似的东西]:
$groupedDataset = @{
ABC1111 = @("1234567891","1234567892","1234567896")
ABC1112 = @("1234567893")
ABC1113 = @("1234567894")
ABC1114 = @("1234567895")
}
将散列 tables 转换为 PSCustomObjects,将其分组,然后将其分配给新的散列 table:
$groupedDataset = @{}
$dataset |
ForEach-Object { [PSCustomObject]$_ } |
Group-Object -Property Code |
ForEach-Object { $groupedDataset[$_.Name] = $_.Group.ID }
有关使用 [PSCustomObject]
从散列 tables 创建自定义对象的更多信息,请参阅 Get-Help about_Object_Creation
。
补充
没有严格要求提供自定义对象作为Group-Object
的输入; [hashtable]
实例可以按原样使用,只要您使用 脚本块参数 访问要分组的条目(PSv3+ 语法):
$ht = @{}
$dataset | Group-Object { $_.Code } | ForEach-Object { $ht[$_.Name] = $_.Group.Id }
注意使用 { $_.Code }
代替 [-Property] Code
;后者仅适用于真正的 properties(与哈希表条目相反;相反,然而,{ $_.Code }
在任何一种情况下都有效,尽管 Code
,如果适用,是更快)。