Массив хэшей с дубликатами Powershell Group - PullRequest
0 голосов
/ 25 мая 2018

У меня есть следующий набор данных [Массив хэшей]:

Предположим, 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 ]

0 голосов
/ 26 мая 2018

В дополнение к полезный ответ Бит Бэкона :

Нет строгой необходимости предоставлять пользовательских объектов в качестве входных данных для Group-Object;[hashtable] экземпляры могут использоваться как есть, если вы используете аргумент блока сценария для доступа к записи в группе с помощью (синтаксис PSv3 +):

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

Обратите внимание наиспользование { $_.Code } вместо [-Property] Code;последний работает только с добросовестными свойствами (в отличие от хеш-таблиц; наоборот, { $_.Code } работает в любом сценарии, хотя Code, если применимо, быстрее).

0 голосов
/ 25 мая 2018

Преобразуйте хеш-таблицы в PSCustomObjects, сгруппируйте их, а затем назначьте для новой хеш-таблицы:

$groupedDataset = @{}

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

См. Get-Help about_Object_Creation для получения дополнительной информации об использовании [PSCustomObject]для создания пользовательских объектов из хеш-таблиц.

...