as3里面的dictionary的遍历

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了as3里面的dictionary的遍历相关的知识,希望对你有一定的参考价值。

本来想自已测试的,由于较忙(也懒- -)而且因为资历浅,所以请高人回答,能不能使用下标遍历;因为问了一些人以及网上查询所有人都说用for.in和for each.但本人在做界面时,在一个多重嵌套循环中,例用了下标处理,无误..如for(var i:int = 0;i<xx;i++)..dic[i].xx = xx;测试并没有错..界面使用也无误,数据也没错.由于键值和i 并没有冲突,所以疑问来了,一:可以使用下标遍历吗?因为有些人说不行,但为何我这边行.二,如果真的不行能否解释一下我出现的问题,如果行,那会不会发生i 和键值(两值相同)冲突,所谓冲突就是本应调第i个元素,却调用了键值为i的元素?还是说就有值相同,因为不是用for..in所以不会发生冲突? 最后请别问我有没看错..哪位高人最好调试过的解释一下..还有请别随便回答..我们应该要对知识负责..如果真没人回答,那我只好找时间自已测试了..

1.因为flash最底层的obj从形式上来说,就是一个值对对象(map),所以flash中的任何实例本身就都能使用数组访问的形式来访问自身属性和方法,但除了dictionary以外,其余对象只能使用int或string作为访问的key。dictionary可以看成一个特殊的值对对象,因为它的key可以是一个任意一个obj。你用下标遍历,没报错,是因为你自身在建立dictionary时就使用的是int对象作为key,一旦遇到非int形的key,那你再采用int型的key去遍历那肯定就会出问题了。

2.即便是在array或vector里面,使用ary[i]获得的对象,其根本含义也是获得键值为i的对象,只是因为array或vector在自身内部做了键值的自动赋予和移位处理,所以看起来似乎array和vector可以用ary[i]来表示获得第i位的对象。
参考技术A 你的key用的是什么,就可以用什么取出来...
你的key用的 0- N
用可以用 for(var i:int = 0;i<n;i++) 取值...
不会出现 (本应调第i个元素,却调用了键值为i的元素)
参考技术B 根本就是把int值强制转换为string后取值的,别想错了 【里面是String类型的键名】

import flash.utils.Dictionary;
var v:Dictionary = new Dictionary()
v["2"] = "我们"
for(var i:uint=0;i<20;i++)
trace(v[i])

从 AS3 中的 Dictionary 继承有啥技巧?

【中文标题】从 AS3 中的 Dictionary 继承有啥技巧?【英文标题】:What's the trick to inheriting from a Dictionary in AS3?从 AS3 中的 Dictionary 继承有什么技巧? 【发布时间】:2012-11-02 03:01:10 【问题描述】:

给定以下代码:

import flash.utils.Dictionary;

import mx.collections.ArrayCollection;
import mx.controls.Alert;

public class CDictionary extends Dictionary

    public function CDictionary(weakKeys:Boolean=false)
    
        super(weakKeys);
    

这会引发错误 #1056:

m_cdictNearIDs = new CDictionary();
m_cdictNearIDs[4] = "f";

但这不是:

m_cdictNearIDs = new Dictionary();
m_cdictNearIDs[4] = "f";

(在每种情况下,它都是一个成员变量,它被声明为与它被实例化的类型相同。)Wth?从字典继承的技巧是什么?谢谢!

【问题讨论】:

【参考方案1】:

你必须将你的类定义为dynamic:

package

    import flash.utils.Dictionary;

    public dynamic class CDictionary extends Dictionary
    
        public function CDictionary(weakKeys:Boolean=false)
        
            super(weakKeys);
        
    

【讨论】:

嗯,显然这实际上取决于您使用的编译器;看这篇文章的第二部分:***.com/questions/8502204/… 我对整个事情感到非常惊讶。嗯,这比我预期的要简单得多。谢谢大佬。 类默认为sealed

以上是关于as3里面的dictionary的遍历的主要内容,如果未能解决你的问题,请参考以下文章

从 AS3 中的 Dictionary 继承有啥技巧?

c#怎么遍历dictionary

c#中Dictionary集合问题

获取键及其值并有效地将其从 Dictionary<string,value> 中删除

Python面试题目之(针对dict或者set数据类型)边遍历 边修改 报错dictionary changed size during iteration

Swift 字典