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. 【Android】保存Fragment切换状态

    前言 一般频繁切换Fragment会导致频繁的释放和创建,如果Fragment比较臃肿体验就非常不好了,这里分享一个方法. 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.c ...

  2. response设置输出文件编码

    在java后台的Action代码或者Servlet代码中用response的方法来设置输出内容的编码方式,有以下三个方法: 1.response.setCharacterEncoding(" ...

  3. MyEclipse Servers视窗出现“Could not create the view: An unexpected exception was thrown”错误的解决办法

    打开myeclipse所在的wordspace文件夹,在下面子文件夹 .metadata\.plugins\org.eclipse.core.runtime\.settings删除 com.genui ...

  4. 【故障处理】一次RAC故障处理过程

    [故障处理]一次RAC故障处理过程 1.1  故障环境介绍 项目 source db db 类型 2节点RAC db version 11.2.0.1.0 db 存储 ASM OS版本及kernel版 ...

  5. C# 多线程,论多核时代爱恨情仇

    为什么要学习多线程? 2010年1月21日是10年某市公务员考试的报名截止日.因从下午2点开始,用于报名的北京市人事考试网瘫痪,原定于昨天下午5点截止的报名时间延迟至今天上午11点. 2011年3月1 ...

  6. Android setTag()/getTag()-(转)

    (转自:http://www.cnblogs.com/topcoderliu/archive/2011/06/07/2074419.html) [自己经历:要getTag前提是要有setTag] se ...

  7. Hive分析hadoop进程日志

    想把hadoop的进程日志导入hive表进行分析,遂做了以下的尝试. 关于hadoop进程日志的解析 使用正则表达式获取四个字段,一个是日期时间,一个是日志级别,一个是类,最后一个是详细信息, 然后在 ...

  8. [转]SQL Server 高性能写入的一些总结

    本文转自:http://www.cnblogs.com/rush/archive/2012/08/31/2666090.html 1.1.1 摘要 在开发过程中,我们不时会遇到系统性能瓶颈问题,而引起 ...

  9. C#基础----Linq之List<T>篇

    最近有用到List处理排序以及分页的问题.想想还是写一个博客记录一下.以下围绕Person类实现,Person类只有Name和Age两个属性   一.List<T>排序 1.1 List& ...

  10. plain framework 1 版本更新 1.0.2 增加打包插件

    由于个别因素,该框架的文档没有及时的更新到博客上,但是离线的文档已经完成.本次更新对框架来说显得比较重要,因为在文档的编写过程中经过再次的阅读代码修复了不少错误,最主要的是统一了整个框架的标准风格.对 ...