如何将多个值添加到区分大小写的 powershell 哈希表?

How to add multiple values to case sensitive powershell hashtable?

我需要一个(键,值)字母哈希表来将字母和数字转换为 PowerShell 中的代码,我是这样做的:

$symbols = @{"A"="0x41"; "B"="0x42"; "C"="0x43"; "D"="0x44"; "E"="0x45"; "F"="0x46"; "G"="0x47"; "H"="0x48"; "I"="0x49"; ....}

但后来我注意到哈希表默认情况下不区分大小写,而我需要区分大小写。我发现我可以创建区分大小写的哈希表:

$symbols = New-Object System.Collections.Hashtable

然后添加值:

$symbols.Add("a","0x41")
$symbols.Add("A","shift+0x41")
....

但这需要 52 行代码,有什么方法可以在一行中向 CASE SENSITIVE 哈希表添加多个值? 因为如果我尝试合并两个哈希表或在一行中添加值,它将变得不区分大小写并抛出有关重复值的错误。

我认为这可能会满足您的需求:

$symbols = New-Object System.Collections.Hashtable

 ((65..90) + (97..122)) | ForEach-Object {
    $symbols.Add([char]$_,"$(if ($_ -lt 97) {'shift+'})0x{0:x}" -f $( if ($_ -lt 97) { $_ } Else { $_ -32 }))
}

$symbols.GetEnumerator() | sort name

这假定您要将字符转换为十六进制代码。

解释:

  • ((65..90) + (97..122)) 创建一个包含两个数字范围的数组,它们是 A..Z 和 a..z 的十进制代码。
  • [Char]
  • 将十进制代码转换为对应的字符字母
  • 如果代码小于 97,请将文本 Shift+ 添加到值的开头。
  • 使用 "0x{0:x}" -f <number> 将数字转换为其等效的十六进制,通过减去 32 将范围改回大写字符的小写范围。