我需要一个(键,值)字母表哈希表来将字母和数字转换为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哈希表添加多个值? 因为如果我尝试组合两个哈希表或在一行中添加值,它将成为不敏感的情况并抛出有关重复值的错误。
答案 0 :(得分:1)
我认为这可能会影响您的目标:
$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]
Shift+
添加到值的开头。"0x{0:x}" -f <number>
将数字转换为十六进制等效值,通过减去32来将范围更改回大写字符的小写范围。