我有一些键值对是从另一个应用程序中获取的,我想在我的脚本中使用它们。
但是它们有时会出现键名大小写不同的情况,例如键名"a"和"A",这样会导致错误,因为重复的键名是不允许的。
$x = @{ "a" = "Entry for a"; "A" = "S.th.else for A" }
我需要同时使用或者不使用这两个选项,应该怎么做?
谢谢您,
Gooly
我有一些键值对是从另一个应用程序中获取的,我想在我的脚本中使用它们。
但是它们有时会出现键名大小写不同的情况,例如键名"a"和"A",这样会导致错误,因为重复的键名是不允许的。
$x = @{ "a" = "Entry for a"; "A" = "S.th.else for A" }
我需要同时使用或者不使用这两个选项,应该怎么做?
谢谢您,
Gooly
默认情况下,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$的结果: (它会区分a
和A
)
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 的输出: (它将把 a
和 A
视为相同)
Name Value
---- -----
a S.th.else for A
1 Entry for 1
0 Entry for 0
注意: $h.GetType()
和$x.GetType()
都是System.Object.Hashtable
类型。System.Collections.Hashtable
创建区分大小写的PowerShell哈希表。$x = New-Object System.Collections.Hashtable
$x['a']="Entry for a"
$x['A']="S.th.else for A"
a
和A
均存在)。这意味着它将a
和A
视为不同的字符。因此,它是区分大小写的。我是正确的吗?@OscarFoley(如果正确,我们需要更改您答案中的第一行,删除“not”一词)。 - Dinesh Balasubramanian