【问题标题】:Powershell Group Array of Hashes with Duplicates具有重复项的 Powershell 组哈希数组
【发布时间】:2018-11-05 01:43:48
【问题描述】:

我有以下数据集 [Array of Hashes]:

假设 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-ByGroup-ObjectSort-Object,但我仍然没有得到我想要的结果。

我希望返回的结果是一个哈希表,看起来像 [或任何类似的东西]:

$groupedDataset = @{
    ABC1111 = @("1234567891","1234567892","1234567896")
    ABC1112 = @("1234567893")
    ABC1113 = @("1234567894")
    ABC1114 = @("1234567895")
}

【问题讨论】:

    标签: arrays powershell collections grouping hashtable


    【解决方案1】:

    将哈希表转换为 PSCustomObjects,对其进行分组,然后将其分配给新的哈希表:

    $groupedDataset = @{}
    
    $dataset |
        ForEach-Object { [PSCustomObject]$_ } |
        Group-Object -Property Code |
        ForEach-Object { $groupedDataset[$_.Name] = $_.Group.ID }
    

    有关使用 [PSCustomObject] 从哈希表创建自定义对象的更多信息,请参阅 Get-Help about_Object_Creation

    【讨论】:

      【解决方案2】:

      补充Bacon Bits' helpful answer

      没有严格要求提供自定义对象作为Group-Object的输入; [hashtable] 实例可以按原样使用,只要您使用 script-block 参数 访问要分组的条目(PSv3+ 语法):

      $ht = @{}
      $dataset | Group-Object { $_.Code } | ForEach-Object { $ht[$_.Name] = $_.Group.Id }
      

      注意使用{ $_.Code } 代替[-Property] Code;后者仅适用于真正的属性(与哈希表条目相反;相反,{ $_.Code } 在任何一种情况下都适用,尽管Code(如果适用)更快)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-18
        • 2016-06-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-03
        • 1970-01-01
        相关资源
        最近更新 更多