PowerShell哈希表问题

4
我正在编写一个脚本,将字母字符串转换为音素值。我遇到的问题是无法引用哈希表中的值(请参见下面的错误)。我不确定原因,因为代码在我看来很好。
Index operation failed; the array index evaluated to null.
At C:\Scripts\test.ps1:8 char:23
    + write-host $alphabet[ <<<< $char]
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArrayIndex

}

参数($string = $(throw'输入字符串'))

$alphabet = @{
"A" = "Alfa";
"B" = "Bravo ";
"C" = "Charlie ";
"D" = "Delta ";
"E" = "Echo ";
"F" = "Foxtrot ";
"G" = "Golf ";
"H" = "Hotel ";
"I" = "India ";
"J" = "Juliett";
"K" = "Kilo ";
"L" = "Lima ";
"M" = "Mike ";
"N" = "November ";
"O" = "Oscar ";
"P" = "Papa ";
"Q" = "Quebec ";
"R" = "Romeo ";
"S" = "Sierra ";
"T" = "Tango ";
"U" = "Uniform ";
"V" = "Victor ";
"W" = "Whiskey ";
"X" = "X-ray";
"Y" = "Yankee ";
"Z" = "Zulu ";
}

clear-host
$charArray = $string.ToCharArray()
foreach ($char in $charArray)
{
    write-host $alphabet[$char]
}

1
Alfa 应该改为 Alpha ;-) - x0n
3个回答

6

每个字符都是一个丰富的对象,更改:

write-host $alphabet[$char]

write-host $alphabet["$char"]

或者

write-host $alphabet[$char.ToString()]


0
你的问题在于 $alphabet[$char] 中,$char 是 null。请问 $chararray 是从哪里来的?

抱歉,当我粘贴代码时,创建字符数组的那一行丢失了。现在我已经添加回去了。 - SuperFurryToad
2
这样行不通;$alphabet的键是字符串,而$char是一个字符。你需要使用$alphabet[$char.ToString()],但这仍然无法解释空值来自何处。 - Gabe
$alphabet[$char.ToString()] 发挥了作用。现在它可以正常工作了,谢谢。 - SuperFurryToad

-1
我认为你需要在数组中的每个字母后面去掉空格。而且,你还漏了在Alfa、Juliett(拼写有误)和X-ray后面加上一个空格。
$alphabet = @{
"A"  =  "Alfa ";
"B"  =  "Bravo ";
"C"  =  "Charlie ";
"D"  =  "Delta ";
"E"  =  "Echo ";
"F"  =  "Foxtrot ";
"G"  =  "Golf ";
"H"  =  "Hotel ";
"I"  =  "India ";
"J"  =  "Juliet ";
"K"  =  "Kilo ";
"L"  =  "Lima ";
"M"  =  "Mike ";
"N"  =  "November ";
"O"  =  "Oscar ";
"P"  =  "Papa ";
"Q"  =  "Quebec ";
"R"  =  "Romeo ";
"S"  =  "Sierra ";
"T"  =  "Tango ";
"U"  =  "Uniform ";
"V"  =  "Victor ";
"W"  =  "Whiskey ";
"X"  =  "X-ray ";
"Y"  =  "Yankee ";
"Z"  =  "Zulu ";
}

谢谢指出。但那是我格式化帖子时出错了。原始代码没有任何空格。 - SuperFurryToad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接