PowerShell如何将哈希数组按Code分组为指定格式的哈希表?
PowerShell: Group Hashtable Array by Code into ID Lists
我明白你想要的是将每个Code映射到对应ID数组的哈希表,之前尝试Group-Object没得到预期结果,大概率是因为没对分组后的结果做格式转换。其实Group-Object正是解决这个问题的核心工具,只需要后续几步转换就能得到你要的结构:
完整解决方案代码
$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" } ) # 初始化空哈希表用于存储分组结果 $groupedDataset = @{} # 分组并转换为目标格式 $dataset | Group-Object -Property Code | ForEach-Object { # 用分组的Code作为键,提取该组所有ID作为值数组 $groupedDataset[$_.Name] = $_.Group.ID } # 验证结果 $groupedDataset
代码说明
- 初始化哈希表:先创建一个空的哈希表
$groupedDataset,用来存放最终的分组结果。 - 分组数据:
Group-Object -Property Code会把原始哈希数组按Code属性分组,返回的是一组GroupInfo对象,每个对象包含:Name:当前分组的Code值Group:属于该分组的所有原始哈希表对象
- 转换为目标格式:通过
ForEach-Object遍历每个分组,将Name作为哈希表的键,把Group中所有对象的ID属性提取成数组作为对应的值。
执行这段代码后,$groupedDataset就会完全符合你想要的格式:
Name Value ---- ----- ABC1111 {1234567891, 1234567892, 1234567896} ABC1112 {1234567893} ABC1113 {1234567894} ABC1114 {1234567895}
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

