ActionScript中没有Map类型,因为Object就相当于Map了。Object的属性相当于key,值相当于value。

也就是说,没有必要有Map类型。但是,这样做,也会带来一些问题,造成不怎么方便。比如:需要知道当前Object有多少个属性,属性值都是什么。另外,从代码可读性上也有点不方便,当把Object当成Map来使用的时候,除非写了注释,否则,别人不知道这个Object的作用是Map。

下面完成了ActionScript的Map类型,其实就是对Object进行了封装,没什么技术含量。不过,对于Java开发人员,使用起来还是很直观的。

Map.as

package common.Utils {

    import mx.utils.ObjectUtil;

    /*
* 参照java.util.Map接口编写,由于ActionScript和Java的差异,去掉了一些方法。
* 被去掉的方法有:entrySet()、equals()、hashCode()
*/ /**
* <code>Map</code>映射类型。
* 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
* 禁止使用<code>null</code>作为键值,否则抛出异常。
* 公开的方法有:
* <ul>
* <li><code>clear():void</code></li>
* <li><code>containsKey(key:String):Boolean</code></li>
* <li><code>containsValue(value:Object):Boolean</code></li>
* <li><code>isEmpty():Boolean</code></li>
* <li><code>keySet():Array</code></li>
* <li><code>put(key:String,value:Object):Object</code></li>
* <li><code>putAll(map:Map):void</code></li>
* <li><code>get(key:String):Object</code></li>
* <li><code>remove(key:String):Object</code></li>
* <li><code>size():int</code></li>
* <li><code> values():Array</code></li>
* </ul>
* @version 1.0 2013/11/21
* @author dongliyang
*/
public class Map { private var _dataMap:Object = null; /**
* <code>Map</code>映射类型。
* 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
* 禁止使用<code>null</code>作为键值,否则抛出异常。
* 公开的方法有:
* <ul>
* <li><code>clear():void</code></li>
* <li><code>containsKey(key:String):Boolean</code></li>
* <li><code>containsValue(value:Object):Boolean</code></li>
* <li><code>isEmpty():Boolean</code></li>
* <li><code>keySet():Array</code></li>
* <li><code>put(key:String,value:Object):Object</code></li>
* <li><code>putAll(map:Map):void</code></li>
* <li><code>get(key:String):Object</code></li>
* <li><code>remove(key:String):Object</code></li>
* <li><code>size():int</code></li>
* <li><code> values():Array</code></li>
* </ul>
*/
public function Map(){
_dataMap = new Object();
} /**
* 从此映射中移除所有映射关系
*/
public function clear():void {
for each(var key:String in keys()){
delete _dataMap[key];
}
} /**
* 如果此映射包含指定键的映射关系,则返回<code>true</code>
* @param key 测试是否存在于此映射中的键
* @return 如果此映射中包含指定键的映射关系,则返回<code>true</code>
*/
public function containsKey(key:String):Boolean {
if(key == null){
return false;
}
return _dataMap.hasOwnProperty(key);
} /**
* 如果此映射中将一个或多个键映射到指定值,则返回<code>true</code>
* @param value 测试是否存在于此映射中的值
* @return 如果此映射将一个或多个键映射到指定值,则返回<code>true</code>
*/
public function containsValue(value:Object):Boolean {
for each(var key:String in keys()){
if(ObjectUtil.compare(_dataMap[key],value) == 0){
return true;
}
}
return false;
} /**
* 如果此映射未包含键-值映射关系,则返回<code>true</code>
* @return 如果此映射未包含键-值映射关系,则返回 <code>true</code>
*/
public function isEmpty():Boolean {
return keys().length == 0;
} /**
* 返回此映射中包含的键的<code>Array</code>视图。
* @return 此映射中包含的键的<code>Array</code>视图
*/
public function keySet():Array {
return keys();
} /**
* 将指定的值与此映射中的指定键关联。
* 如果此映射以前包含一个该键的映射关系,则用指定值替换旧值。
* @param key 与指定值关联的键
* @param value 与指定键关联的值
* @return 以前与 key关联的值,如果没有针对 key 的映射关系,则返回 <code>null</code>
*/
public function put(key:String,value:Object):Object {
if(key == null){
throw new Error("键值Key不能为null");
}
if(containsKey(key)){
var oldValue:Object = _dataMap[key];
_dataMap[key] = value;
return oldValue;
} else {
_dataMap[key] = value;
return null;
} } /**
* 从指定映射中将所有映射关系复制到此映射中。
* 对于指定映射中的每个键key到值value的映射关系,此调用等效于对此映射调用一次 put(key,value)
* @param map 要存储在此映射中的映射关系
*/
public function putAll(map:Map):void {
if(map == null){
throw new Error("指定的映射Map为null");
} for each(var key:String in map.keySet()){
_dataMap[key] = map.get(key);
}
} /**
* 返回指定键所映射的值,如果此映射不包含该键的映射关系,则返回<code>null</code>
* @param key 要返回其关联值的键
* @return 指定键所映射的值;如果此映射不包含该键的映射关系,则返回 <code>null</code>
*/
public function get(key:String):Object {
if(containsKey(key)){
return _dataMap[key];
} else {
return null;
}
} /**
* 如果存在一个键的映射关系,则将其从此映射中移除。
* 返回此映射中以前关联该键的值,如果此映射中不包含该键的
* 映射关系,则返回null。
* 调用返回后,此映射将不再包含指定键的映射关系。
* @param key 从映射中移除其映射关系的键
* @return 以前与key关联的值,如果没有key的映射关系,则返回<code>null</code>
*/
public function remove(key:String):Object {
if(containsKey(key)){
var oldValue:Object = get(key);
delete _dataMap[key];
return oldValue;
} else {
return null;
}
} /**
* 返回此映射中的键-值映射关系数。
* @return 此映射中的键-值映射关系数
*/
public function size():int {
return keys().length;
} /**
* 返回此映射中包含的值得<code>Array</code>视图
* @return 此映射中包含的值的<code>Array</code>视图
*/
public function values():Array {
var values:Array = new Array();
for each(var key:String in keys()){
values.push(_dataMap[key]);
}
return values;
} /**
* 返回此映射中包含的键的<code>Array</code>视图
* @return 返回此映射中包含的键的<code>Array</code>视图
*/
private function keys():Array {
var clsInfo:Object = ObjectUtil.getClassInfo(_dataMap);
var props:Array = clsInfo["properties"];
var keys:Array = new Array();
for each(var q:QName in props){
keys.push(q.localName);
}
return keys;
}
}
}

Flex ActionScript版本的Map类型的更多相关文章

  1. C++map类型

    map是键-值对的集合,可以理解为关联数组,可以使用键作为下标来获取一个值 本文地址:http://www.cnblogs.com/archimedes/p/cpp-map.html,转载请注明源地址 ...

  2. map 类型

    map 是键-值对的集合.map 类型通常可理解为关联数组(associative array): 可使用键作为下标来获取一个值,正如内置数组类型一样.而关联的本质在于元素的值与某个特定的键相关联,而 ...

  3. C++容器(四):map类型

    map 类型 map是键-值对的集合.map类型通常可以理解为关联数组:可以使用键作为下标来获取一个值,正如内置数组类型一样.而关联的本质在于元素的值与某个特定的键相关联,而非通过元素在数组内的位置来 ...

  4. 2、Golang基础--包的使用、if-else语句、循环、switch语句、数组、切片、可变函数参数、map类型

    1 包的使用 // 为了便于组织代码,同一种类型的代码,写在同一个包下,便于管理 // 定义包 -新建一个文件夹 -内部有很多go文件 -在每个go文件的第一行,都要声明包名,并且包名必须一致 -在一 ...

  5. ArcGIS for Flex中引入google map作底图

    上篇文章到在ArcGIS View中引入google map,这里讲ArcGIS for Flex中引入google map作底图. 同样道理,以google map作底图,需要编写继承自TiledM ...

  6. zk框架中利用map类型传值来创建window,并且传值

    @Command @NotifyChange("accList") public void clear(@BindingParam("id") String a ...

  7. Hibernate执行原生SQL返回List<Map>类型结果集

    我是学java出身的,web是我主要一块: 在做项目的时候最让人别扭的就是hibernate查询大都是查询出List<T>(T指代对应实体类)类型 如果这时候我用的联合查询,那么返回都就是 ...

  8. javabean实体类对象转为Map类型对象的方法(转发)

    //将javabean实体类转为map类型,然后返回一个map类型的值 public static Map<String, Object> beanToMap(Object obj) { ...

  9. Play Framework常用标签list,set,如何遍历list、map类型数据

    最近一段时间的项目都是在Play这个框架上进行开发的,挺强大的,但不足之处也挺多的.今天分享下play中强大的标签,遍历list,map类型的数据的用法. 遍历单纯的list数据,例如:List< ...

随机推荐

  1. iOS开发--Swift 基于MVC设计模式的简单的tableViewDemo

    如果说MVC是最好的设计模式, 可能很多人并不赞同, 但是如果说MVC是最主流, 应用面最广的设计模式, 我想这是毫无争议的. 不说废话, 直接演示在Swift中如何使用MVC新建工程(我并没有新建文 ...

  2. NSString方法与NSMutableString方法

    NSString方法+(id) stringWithContentsOfFile:path encoding:enc error:err创建一个新字符串并将其设置为path指定的文件的内容,使用字符编 ...

  3. c中的函数

    一. 什么是函数 l 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”.所以,你可以说C语言程序是由函数构成的. l 比如你用C语言 ...

  4. 【好书摘要】性能优化中CPU、内存、磁盘IO、网络性能的依赖

    系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上 ...

  5. 1.6 基础知识——GP2.5 培训(Training)

    摘要: 实际上做任何项目总会缺失各种技能,培训特别是未雨绸缪的培训就显得很必要了! 正文: GP2.5 Traing the people performing or supporting XXX p ...

  6. Windows下使用AutoSSH,并作为服务自启动(不用安装Cygwin)

    之前的折腾过Windows下ssh的自动登录,比如这篇Windows下使用Xshell建立反向隧道,但是这个不能无交互的情况下自动连接(比如在连接新主机时),也就很难在服务中使用.解决方法还是得使用命 ...

  7. linux 运维必备150个命令

    线上查询及帮助命令(1个) man 目录操作命令(6个) ls tree pwd mkdir rmdir cd 文件操作命令(7个) touch cp mv rm ln find rename 文件查 ...

  8. 常用的JAVA集合讲解

    java.util包中包含了一系列重要的集合类,而对于集合类,主要需要掌握的就是它的内部结构,以及遍历集合的迭代模式. 接口:Collection Collection是最基本的集合接口,一个Coll ...

  9. Sql Server 2008R2 遇到了BCP导入各种中文乱码的问题

    今天玩BCP导入数据的时候,有文件格式,有中文字符串问题……以下是历程,和大家分享一下,希望不要走我的弯路 主要那个表是一个翻译表,一个文件里面内涵几十种语言,所以很容易发现问题. 0.使用最常用的语 ...

  10. php cli方式下获取服务器ip

    (未整理....) (1)php cli方式下获取服务器ip [php]  function getServerIp(){          $ss = exec('/sbin/ifconfig et ...