2010-06-02 68 views
4

当您执行“for ... in”循环时,它将遍历字典,例如。我想知道这是如何被内部跟踪以及如何访问?动作脚本字典:如何访问第一个元素?它如何存储?

我认为Dictionary类存储对第一项的引用,但我想访问它并检查,但我无法弄清楚如何。这有点高级,有没有人请有想法?

感谢, 鲁迪

回答

6

的ActionScript的字典类是不是一个真正的有序集合。换句话说,它并没有真正的“第一项”。当然,如果您通过使用forfor each循环的项目迭代,其中一个项目必须首先访问,所以你可以做这样的事情:

var firstKey:*; 
var firstValue:*; 
for (firstKey in myDictionary) 
{ 
    firstValue = myDictionary[firstKey]; 
    break; 
} 
// variables now hold the "first" key and value, or undefined if the dictionary is empty. 

然而,Dictionary类没有合同关于项目的顺序,即使顺序是可预测的(字母键,首先分配==首先返回等),我会认为它是一个实现细节,可能会在玩家版本之间发生变化。此外,该课程不会公开您可以访问的任何内部地图。

如果你真的关心控制迭代顺序(或者只是想知道如何在ActionScript中处理它),我会建议检查Proxy class。通过扩展它并覆盖一些方法,您可以控制项目迭代的顺序,以及其他一些很酷的东西。 (与迭代有关的方法是nextName(),nextNameIndex()nextValue(),并且在official documentation中有一个示例。)这样,您可以创建自己的类似Dictionary的集合类,该集合类还可以对项目进行索引。

或者,您可以查看第三方收集/迭代器软件包,它们可能已经具有您需要的内容。

+0

谢谢马修,这是一个非常完整的解释。我正在使用带有break语句的循环,就像你所建议的那样,但我正在考虑到排序可能会发生变化,而且没有很好的定义。我将遵循你的建议并创建自己的班级。非常感谢! – Rudy 2010-06-07 16:07:24

相关问题