Доступ к вложенным hasttables по его ключу - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь работать с вложенными хеш-таблицами, чтобы получить конкретное значение (число). Хеш-таблица выглядит следующим образом.

$Hashtable = @{
    'Feature1' = @{
        'Audit'  = 1
        'Block'  = 2
        'Change' = 3
    }
    'Feature2' = @{
        'Audit'  = 4
        'Block'  = 5
        'Change' = 3
    }
}

Я хочу получить доступ к хеш-таблице с помощью поиска по ключу. Первый пример работает просто отлично.

$Hashtable['Feature1']['Audit', 'Block']
1
2

Указание нескольких клавиш тоже работает нормально.

$Hashtable['Feature1', 'Feature2']

Name                           Value
----                           ---- -
Block                          2
Change                         3
Audit                          1
Block                          5
Change                         3
Audit                          4

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

$Hashtable['Feature1', 'Feature2']['Block', 'Audit']

Ожидаемый результат будет 2, 1, 5 и 4, но вместо этого я получу $null.

У меня есть обходной путь. Если я переберу первый результат, я получу ожидаемый результат.

$Hashtable['Feature1', 'Feature2'] | % {$_['Block', 'Audit']}
2
1
5
4

Мне просто интересно, есть ли 1) более хороший способ сделать это и 2) почему я должен повторить цикл в этом примере.

Хотелось бы получить доступ к хеш-таблице, например $Hashtable[$Features][$Actions], где обе переменные являются массивом ключей.

1 Ответ

0 голосов
/ 29 июня 2018
$Hashtable['Feature1', 'Feature2'].Block

$Hashtable['Feature1', 'Feature2'] - это массив, а запись array.Property - это сокращение для выбора одного свойства для всех элементов массива (требуется PowerShell v3 или новее).

Edit: вышеупомянутый подход работает только тогда, когда вам нужен один ключ. Если вам нужно несколько, я не могу придумать способ пропустить итерации по внутренним хеш-таблицам. Выбор нескольких ключей одновременно (например, $Hashtable['Feature1', 'Feature2']) может быть выполнен только для хеш-таблиц, но не для массивов, и возвращает массив, поэтому его нельзя объединить в цепочку.

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