代码之家  ›  专栏  ›  技术社区  ›  Alex

具有重复哈希的PowerShell组数组

  •  2
  • Alex  · 技术社区  · 6 年前

    我有以下数据集[哈希数组]:

    假定 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")
    }
    
    2 回复  |  直到 6 年前
        1
  •  5
  •   mklement0    6 年前

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

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

    Get-Help about_Object_Creation [PSCustomObject] 从哈希表创建自定义对象。

        2
  •  4
  •   mklement0    6 年前

    补充 Bacon Bits' helpful answer :

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

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

    注意使用 { $_.Code } 代替 [-Property] Code ;后者只与真诚合作 属性 (与哈希表条目相反;相反, $代码 不过,在这两种情况下都有效 Code 如果适用,速度更快)。