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

时间:2017-10-31 08:52:59

标签: 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哈希表添加多个值? 因为如果我尝试组合两个哈希表或在一行中添加值,它将成为不敏感的情况并抛出有关重复值的错误。

1 个答案:

答案 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]
  • 对应的字符
  • 如果代码小于97,请将文本Shift+添加到值的开头。
  • 使用"0x{0:x}" -f <number>将数字转换为十六进制等效值,通过减去32来将范围更改回大写字符的小写范围。