gpt4 book ai didi

arrays - 数组上的字符串键为 `for ... in`

转载 作者:行者123 更新时间:2023-12-01 15:29:35 24 4
gpt4 key购买 nike

自相矛盾的是,在运行 for ... inArray 上的表达式,您的迭代器不是您期望的 int,而是被强制转换为 String。请允许我演示...

for (var key:int in a) { // 
trace(getType(item) + " = " + a[key])
}

function getType(value:*):String {
// Returns the type of object passed to it.
var msg:String = flash.utils.getQualifiedClassName(value);
if (msg.lastIndexOf("::") != -1) {msg = msg.split("::")[1];}
return msg;
}

运行这个,你会得到编译错误

1067:将 String 类型的值隐式强制转换为不相关的 int 类型。

您可能认为 Adob​​e 会根据源对象注意返回值,但在 API 引用中,它清楚地说明...

Parameters: variableIterant:String

嗯,这显然是个谎言,否则我们如何遍历 Dictionary 对象?

var a:Array = ["a","b","c"];

var dict:Dictionary = new Dictionary();
dict[a] = true;

for (var key:Object in dict) {
trace(getType(key)); // traces: "Array"
}

您应该立即注意到我们的 key 变量的强数据类型的差异。诚然,ObjectArray 的父类,因此它不会引发编译错误,但它也不会被强制转换为 String。

在我们的数组索引上再次尝试,但这次是作为一个对象...

for (var key:Object in a) {
trace(getType(item) + " = " + a[key]) // traces: "int = a, int = b, int = c"
}

我们如何使用对象键访问数组值? 这不是字典

我想我在某种程度上是在发泄,但我是否认为这是一个错误,值得向 Adob​​e 报告?

最佳答案

首先让我说一下,使用for in 循环允许您访问对象的属性。由于数组继承自对象,您可以访问字符串或整数格式的数组元素,但是当使用 for in 循环时,迭代器引用总是键入 String(如您所见)。

这些 Object 继承类的行为类似于 HashMap 。 Array 不同,因为它可以使用字符串或整数执行这些查找。另一方面,字典可以使用对象作为键,而无需进行 toString() 转换。

解决问题的最后一部分,询问为什么我们可以在数组查找中使用对象。正如您所知道的那样,编译器执行 coerse_s - 在运行 for in 循环时转换为字符串。 String 继承自Object,最终查找时字符串和对象没有区别。

最后,您可以通过将 key 设置为无类型来绕过所有这些(如果您不需要严格键入的 key ,则应该这样做):

 for ( var key:* in a ) {
trace(a[key]);
}

这边将编译器转换为字符串,是一种优化。有关详细信息,请参见此处:5x Faster For-In Loops

关于arrays - 数组上的字符串键为 `for ... in`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22072511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com