PowerShell哈希表双键错误:"a"和"A"

10

我有一些键值对是从另一个应用程序中获取的,我想在我的脚本中使用它们。
但是它们有时会出现键名大小写不同的情况,例如键名"a"和"A",这样会导致错误,因为重复的键名是不允许的。

  $x = @{ "a" = "Entry for a"; "A" = "S.th.else for A" }

我需要同时使用或者不使用这两个选项,应该怎么做?

谢谢您,
Gooly

2个回答

11

默认情况下,PowerShell哈希表是区分大小写的。 尝试这个

$h = new-object System.Collections.Hashtable
$h['a'] = "Entry for a"
$h['A'] = "S.th.else for A"
$h[0] = "Entry for 0"
$h[1] = "Entry for 1"
$h

输出$h$的结果: (它会区分aA)

Name                           Value
----                           -----
A                              S.th.else for A
a                              Entry for a
1                              Entry for 1
0                              Entry for 0

或者这个(取决于您喜欢的语法)

$hash = New-Object system.collections.hashtable
$hash.a = "Entry for a"
$hash.A = "S.th.else for A"
$hash.0 = "Entry for 0"
$hash.1 = "Entry for 1"
$hash.KEY
$hash

但是,如果您使用@{}语法创建哈希表,则不区分大小写。

$x = @{}
$x['a'] = "Entry for a"
$x['A'] = "S.th.else for A"
$x[0] = "Entry for 0"
$x[1] = "Entry for 1"
$x

对于 $x 的输出: (它将把 aA 视为相同)

Name                           Value
----                           -----
a                              S.th.else for A
1                              Entry for 1
0                              Entry for 0
注意: $h.GetType()$x.GetType()都是System.Object.Hashtable类型。

好的 - 这对于 "a" 和 "A" 是有效的,但现在键 0..9 不被接受 :( - gooly
我已经测试了代码,使用0到9的键可以正常工作。我已经编辑了答案以显示... - Oscar Foley
2
但这个可以工作:$hash.Add("0","..."); $hash.Add("a","..."); $hash.Add("A","..."); - gooly
如果:$hash = New-Object system.collections.hashtable $hash.0 = "Check 0" 我得到:+ $hash.0 <<<< = "Check 0" + CategoryInfo : ParserError: (.0:String) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : UnexpectedToken - gooly
即使访问$hash.0也不起作用,但$s="0";$hash.$s;给我返回了“0”后面的值。 - gooly
以上$h的输出具有4个键(aA均存在)。这意味着它将aA视为不同的字符。因此,它是区分大小写的。我是正确的吗?@OscarFoley(如果正确,我们需要更改您答案中的第一行,删除“not”一词)。 - Dinesh Balasubramanian

2
您可以使用System.Collections.Hashtable创建区分大小写的PowerShell哈希表。
$x = New-Object System.Collections.Hashtable 
$x['a']="Entry for a"
$x['A']="S.th.else for A"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接