【问题标题】:How to add multiple values to case sensitive powershell hashtable?如何将多个值添加到区分大小写的 powershell 哈希表?
【发布时间】:2018-04-12 09:05:05
【问题描述】:

我需要一个字母表的(键,值)哈希表来将字母和数字转换为 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 哈希表添加多个值? 因为如果我尝试组合两个哈希表或在一行中添加值,它会变得不区分大小写并引发有关重复值的错误。

【问题讨论】:

    标签: powershell hashtable


    【解决方案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 将大写字符的范围改回小写范围。

    【讨论】:

    • 哇,这是一些高级的东西。使用范围来减少行数的好主意。如果没有本地方法可以做到这一点,那么您就是唯一的方法,谢谢!
    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 2010-09-23
    • 2021-04-04
    相关资源
    最近更新 更多