Powershell - 数组中的哈希表

时间:2012-03-26 16:00:04

标签: powershell hash

我在Powershell中有一个包含以下行的数组: 1,送给Tgt,10,FLD 2,XM,8,连接 3,TX,12,连接

第一列是行计数器,第二列是过滤器类型,第三列是计数,第四列是行动类型。

我需要创建第二个和第二个的哈希表。第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可以使用$ z.Keys在foreach中引用,但我无法在$ z2上引用相同的内容。即使每行有3行,$ z也是3行数组,但$ z2是3个数组的数组,每行1行。我想要做的是让$ z和$ z2哈希表在各方面都相同。

我确定我正在做一些显而易见的事情。错误尝试从现有阵列创建此哈希表,但无法弄清楚我做错了什么。任何建议表示赞赏。

谢谢!

1 个答案:

答案 0 :(得分:3)

您没有显示初始化$z2的位置,但使用此行:

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

您正在使用单个条目(键$b[1]和值$b[2])创建新的哈希表,并将其添加到$z2

相反,请尝试使用:

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

要创建空哈希表,请使用@{},而不是@()来创建数组。