bugfix> arrays > 投稿

次のデータセット[ハッシュの配列]があります。

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-ObjectSort-Object しかし、私はまだ私が望む結果を得ていません。

私が返すことを期待している結果は、次のようなハッシュテーブルです[または同様のもの]:

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

回答 2 件
  • ハッシュテーブルをPSCustomObjectsに変換し、グループ化して、新しいハッシュテーブルに割り当てます。

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

    Get-Help about_Object_Creation を参照   [PSCustomObject] の使用の詳細については  ハッシュテーブルからカスタムオブジェクトを作成します。

  • ベーコンビットの有用な答えを補完するには:

    厳密に提供する必要はありませんカスタムオブジェクト  Group-Object への入力として ; [hashtable]  インスタンスを使用する限り、そのまま使用できますスクリプトブロック引数 グループ化するエントリにアクセスするには(PSv3 +構文):

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

    { $_.Code } の使用に注意してください   [-Property] Code の代わりに ;後者は善意でのみ動作しますプロパティ (ハッシュテーブルのエントリとは対照的に、逆に、 { $_.Code }  いずれのシナリオでも機能しますが、 Code 、該当する場合はより高速です)。

あなたの答え