Powershell - хеш-таблица из массива - PullRequest
0 голосов
/ 26 марта 2012

У меня есть массив в Powershell со следующими строками: 1, Tgt, 10, Fld 2, XM, 8, Fi 3, TX, 12, Фи

Первый столбец - счетчик строк, второй столбец - тип фильтра, 3-й столбец - счетчик, 4-й столбец - тип действия.

Мне нужно создать хеш-таблицу из 2-го и 3-го столбцов.

Когда я делаю следующее в Powershell, он создает хеш-таблицу, которую я могу использовать.

$z=@()
$z = {
Tgt = 10
XM = 8
TX = 12
}

Но, если я использую foreach, чтобы попытаться сделать то же самое, он создает коллекцию коллекции.

foreach ($b in $arr) {
   $z2 += @{$b[1] = $b[2]}
   }

Каждый имеет 3 элемента, но хеш-таблица $ z представляет собой {System.Collections.DictionaryEntry,System.Collections.DictionaryEntry,System.Collections.DictionaryEntry}

в то время как хеш-таблица $ z2 является

{{System.Collections.DictionaryEntry},{System.Collections.DictionaryEntry},{System.Collections.DictionaryEntry}}

На $ z можно ссылаться в foreach с помощью $ z.Keys, но я не могу сослаться на то же самое на $ z2. Несмотря на то, что у каждого есть 3 строки, $ z - это массив из 3 строк, но $ z2 - это массив из 3 массивов по 1 строке в каждой. Я хочу, чтобы хеш-таблицы $ z и $ z2 были во всех отношениях идентичны друг другу.

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

Спасибо!

1 Ответ

3 голосов
/ 26 марта 2012

Вы не показываете, где вы инициализируете $z2, но с этой строкой:

$z2 += @{$b[1] = $b[2]}

вы создаете новую хеш-таблицу с одной записью (ключ $b[1] и значением $b[2]) и добавляете ее в $z2.

Вместо этого попробуйте использовать:

$z2[$b[1]] = $b[2]

Чтобы создать пустую хеш-таблицу, используйте @{} вместо @(), который создает массив.

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