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. Provisioning Profile文件在哪找?

    ~/Library/MobileDevice/Provisioning Profiles

  2. AOP的实现机制

    1 AOP各种的实现 AOP就是面向切面编程,我们可以从几个层面来实现AOP. 在编译器修改源代码,在运行期字节码加载前修改字节码或字节码加载后动态创建代理类的字节码,以下是各种实现机制的比较. 类别 ...

  3. MVC6的内置ActionResult类型

    BadRequestObjectResult,BadRequestResult http 400 bad request ChallengeResult   ContentResult   Creat ...

  4. android + red5 + rtmp

    背景:在已有的red5服务器环境下实现android客户端的视频直播 要实现客户端视频直播就先先对服务器端有所了解 Red5流媒体服务器是Adboe的产品,免费并且是开源的,与Flash搭配的时候可谓 ...

  5. 优化SqlServer--数据压缩

    数据压缩是对存储和性能优势的加强.减少数据库占用的磁盘空间量将减少整体数据文件存储空间,在一下几个方面增加吞吐量: 1.更好的I/O利用率,每个页面可以读写更多的数据. 2.更好的内存利用率,缓冲区可 ...

  6. jQuery简单入门(五)

    5.Ajax应用 在jQuery中$ajax()方法属于最底层的方法,第二层是load().$.get().$.post(),第三层是$.getScript()和 $.getJSON():下面根据使用 ...

  7. SQL Server 2008 R2——PIVOT 行转列 以及聚合函数的选择

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  8. MongoDB Sharding、库、collection设计学习汇总

    sharding设计须考虑的几个因素 Sharding Key的选择           在片键的选择上,最好是能够在字段中选择混合型的片键,大范围的递增健.和随机分布的健组合,如按月份递增.按用户名 ...

  9. android中BuildConfig.DEBUG的使用

    ADT(r17)中添加了一个新功能可以允许开发者只在Debug模式下允许某些代码.Build系统生成一个名称为BuildConfig的类,该类包含一个DEBUG 常量,该常量会根据您的Build类型自 ...

  10. Device ehth0 is not present

    context: 使用virtualbox 克隆了一个新硬盘,然后配为新建虚机的使用,但ifconfig只能发现lo,没有eth0 解决方案: 当前系统是centos6.6 cd /etc/udev/ ...