如何将多个值添加到区分大小写的 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 将范围改回大写字符的小写范围。
我需要一个(键,值)字母哈希表来将字母和数字转换为 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 将范围改回大写字符的小写范围。