簡體   English   中英

Powershell Group具有重復項的哈希數組

[英]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-ByGroup-ObjectSort-Object但我仍然沒有得到我想要的結果。

我希望返回的結果是一個哈希表,看起來像[或類似的東西]:

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

將哈希表轉換為PSCustomObjects,對其進行分組,然后將其分配給新的哈希表:

$groupedDataset = @{}

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

有關使用[PSCustomObject]從哈希表創建自定義對象的更多信息,請參閱Get-Help about_Object_Creation

補充培根比特的有用答案

沒有嚴格要求提供自定義對象作為Group-Object輸入; [hashtable]實例可以按原樣使用,只要您使用script-block參數來訪問要分組的條目(PSv3 +語法):

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

注意使用{ $_.Code } [-Property] Code { $_.Code }代替[-Property] Code ; 后者僅適用於真正的屬性 (與哈希表條目相反;相反, { $_.Code }適用於任一情況,但Code (如果適用)更快)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM