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-读取一段文字

    一,效果图. 二,工程图. 三,代码. RootViewController.m #import "RootViewController.h" @interface RootVie ...

  2. IOS开发之功能模块--给任意的UIView添加点击事件

    前言:好久没写博客,今天来一波.我在实际项目开发中,会遇到这样功能需求:我已经搭好了iOS的UI界面,但是很多界面的子View用了UIView,然后这些UIView中用了UILabel和UIImage ...

  3. mysql中数据类型的取值范围

    mysql整型bigint.int.mediumint.smallint 和 tinyint的语法介绍,如下: 1.bigint 从 -2^63 (-9223372036854775808) 到 2^ ...

  4. Node异步I/O、事件驱动与高性能服务器

    事件循环.观察者.请求对象.I/O线程池这四者共同构成了Node异步I/O模型的基本要素. 异步I/O流程:

  5. python 读写文件

    #! -*- encoding:utf-8 -*- import os from config import * from function import GetCsspToken, RegistIn ...

  6. Hello BIEE

      这篇文章提供了一个Hello World式的例子,讲述如何创建一个最简单的BIEE资料库.本文使用的示例数据可以在从此链接下载:http://www.zw1840.com . 目录 创建资料库 创 ...

  7. visual studio生成后调试启动又提示部分项目需要生成问题总结

    长久以来若干个项目都遇到过类似的情形,已经成功生成的项目启动调试或者再生成依然认为部分项目需要生成而不是跳过.总结以往的经验,记录下来,以便大家遇到时处理. 若有多个项目提示需要重新生成,优先检查被依 ...

  8. form.submit() not a function的元凶

    今天晚上学习jquery form plugin时,在明白了该插件的用法时, (1)该插件是将form的HTTP请求 改为AJax请求. (2)支持像jQuery.ajax(options)一样 的o ...

  9. C++之STL一般总结

    重新复习一下STL 什么是STL? STL(模板和标准模板库),实现与类型无关的算法和数据类型,需要将实现中的类型参数化,允许用户根据它的需要制定不同的类型. 一.一般介绍 STL(Standard ...

  10. 深入理解FTP协议

    文件传输协议FTP(File Transfer Protocol)是因特网中使用最广泛的文件传输协议.FTP使用交互式的访问,允许客户指定文件的类型和格式(如指明是否使用ASCII码),并允许文件具有 ...