autohotkey - 解析为数字的关联数组键不返回任何结果
问题描述
如果我遍历字符串数组,并将每个字符串用作关联数组的键,则作为数字的字符串表示的键无法“找到”其关联值:
KeyArray := Array("AAA", "777")
AssocArray := {"AAA":{"Item1":"Item1Value", "Item2":"Item2Value"}
,"777":{"Item1":"Item1Value", "Item2":"Item2Value"}}
Loop % KeyArray.Length() {
aKey := KeyArray[A_Index]
aValue := AssocArray[aKey]
sResult := aKey . ": " . aValue["Item1"] . "`t" . aValue["Item2"]
ToolTip, % sResult
OutputDebug % "[AHK] sResult: " . sResult . " "
Sleep 5000
}
但是,如果我使用 For 循环来迭代键:
For aKey, aValue In AssocArray {
sResult := aKey . ": " . aValue["Item1"] . "`t" . aValue["Item2"]
ToolTip, % sResult
OutputDebug % "[AHK] sResult: " . sResult . " "
Sleep 5000
}
然后“777”被识别为一个键,并且它的值被正确返回或者,如果我从 KeyArray 和 AssocArray 中的“777”中删除引号,那么两个循环都会找到正确的值。
现在问题来了:
如何正确使用数字的字符串表示形式作为关联数组的键?
非常感谢!
解决方案
这与内部类型强制和数字缓存有关。
换句话说,字符串 "777" 被强制转换为数字 777 in AssocArray[aKey]
,因为如果评估结果是数字形式,任何表达式(aKey
在这种情况下)都会产生一个数字,除非另有明确说明。
一种解决方法:
aValue := AssocArray[aKey ""]
通过上面的单行修改,您的第一段代码已经测试可以工作。
编辑:
关于下面评论中的问题,这里有一些参考资料:
但是请注意,“隐式”和“显式”是强制上下文中的相对术语。
推荐阅读
- excel - 如何使用 MS Form=>MS Flow=>Excel sheet 更新 Excel 中的行
- database - Oracle 11g 查询中的标识符无效
- java - 如何仅将 Json 字符串的相关部分转换为 Set?
- c++ - 如何在 C++ 静态库中隐藏符号?
- sql - 创建脚本以根据来自 4 个相关表的两个选择的划分来更新表行
- android - 用不同的图像替换同名的标志,无法运行应用程序
- google-cloud-dataflow - 谷歌数据流可以使用现有的虚拟机而不是临时创建的虚拟机吗?
- typescript - 是否可以在 rxjs6 和 Angular 中共享订阅事件?
- json - jq,拆分一个巨大的json数组并保存到以值命名的文件中
- git - 詹金斯在哪里克隆 git repo