Как получить количество значений из Hashtable для каждого ключа в powershell - PullRequest
1 голос
/ 29 апреля 2020

В настоящее время я могу получить список значений из хеш-таблицы с помощью нижеприведенного командлета, но я хотел бы получить количество значений для каждого ключа. Пожалуйста, дайте мне несколько советов, если это может быть достигнуто с помощью метода GetEnumerator

$keys.GetEnumerator() | % {
    [PSCustomObject]@{
        key = $_.Value
    }
}

Мои ключи Hashtable $:

Name                           Value                                                                                                 
----                           -----  
9                              {G637A146}                                                                 
-3                             {F637A146, G637A146}                            
3                              {F637A146, E637A146}                            
-2                             {F637A146} 

Ожидаемый вывод с использованием GetEnumerator:

Key     Value                                                                                                 
----    ----- 
9       1
-3      2
3       2
-2      1

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Предположим, ваша хеш-таблица выглядит следующим образом:

$keys = [ordered]@{
    9  = 'G637A146'
    -3 = 'F637A146', 'G637A146'
    3  = 'F637A146', 'E637A146'
    -2 = 'F637A146'
}

Тогда вы получите то, что хотите:

$keys.GetEnumerator() | ForEach-Object {
    [PSCustomObject]@{
        Key   = $_.Key
        Value = ($_.Value).Count
    }
}

Вывод:

Key Value
--- -----
  9     1
 -3     2
  3     2
 -2     1
0 голосов
/ 29 апреля 2020

Я думаю, что вы можете преобразовать значение в массив, а затем получить свойство Count.

Итак:

$keys.GetEnumerator() | % {
    [PSCustomObject]@{
        key = @($_.Value).Count
    }
}

, если я правильно понимаю ваш код.

Это называется оператором подвыражения массива согласно about_Arrays .


Поскольку ответ на комментарий предыдущего предложения указывает на то, что формат вывода значения не некоторого объекта, а не строки, тогда значение нужно будет проанализировать.

Вот пример того, как это можно сделать:

@('{a,b}' -replace '{', '' -replace '}', '' -split ',').Count

, который выдает результат 2.

Это просто использует операторы, как описано в about_Operators

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...