为什么hashtable count = 1而不是= 5?

时间:2017-01-10 23:15:15

标签: powershell hashtable

我正在尝试阅读并将5项分成哈希表。 但我只在哈希表中得到一对。

$h=@{}
@"
c : A P L
R : 6h
H : HN-56-78
L : binary
E : m@a.com
"@ | %{ $v,$k = $_ -replace ' ' -split ':' ; $h.Add($v,$k) }
$h.Count

1 个答案:

答案 0 :(得分:3)

您的字符串作为整个字符串被传送到ForEach-Object%)。您的代码中没有任何部分将其拆分为行,因此不会逐行处理。因此,您将获得如下数据结构:

{
  'c': [ "APL`nR", "6h`nH", "HN-56-78`nL", "binary`nE", "m@a.com" ]
}

在将每一行拆分为冒号之前将字符串拆分为行,以避免这种情况:

$h=@{}
@"
c : A P L
R : 6h
H : HN-56-78
L : binary
E : m@a.com
"@ -split "\r?\n" | %{ $v,$k = $_ -replace ' ' -split '\s*:\s*' ; $h.Add($v,$k) }
$h.Count

我还将Ansgar的建议整合到您的其他拆分中,将\s*放在:的任意一侧。这将作为分隔符的一部分捕获任何和所有空格,而不是将其包含在结果值中。