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开发之 用第三方类库实现轮播图

    在github上面有很多的第三方类库,大大节约了大家的开发时间 下载地址:https://github.com/gsdios/SDCycleScrollView 现已支持cocoapods导入:pod ...

  2. iOS [[NSBundle mainBundle] pathForResource:@"" ofType:@""]无法获取到文件

    将一个文件导入到工程中后,用[[NSBundle mainBundle] pathForResource:@"" ofType:@""]来获取到该文件时,一直无 ...

  3. Java中定义Map常量,List常量

    一般的方式的使用静态代码块.比如: public final static Map map = new HashMap(); static { map.put("key1", &q ...

  4. VS2015 Git 插件使用教程

    VS2015 中继承了 Git 插件,再也不用下载 Github for Windows了. 从 团队-管理连接  中打开 团队资源管理器 克隆Repository 在 本地 Git 存储库下面点击 ...

  5. 关于<appSettings file="app.config" >引用外部文件的配置值

    web.config文件中,appSetting节点引用了外部的配置文件, <appSettings file="app.config"> </appSettin ...

  6. php示例代码之使用MySQLi接口

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  7. WPF学习之路(七)应用程序和窗口(续)

    窗口的生命周期 WPF中一个Window类代表一个窗口 一个的窗口的生命周期也有好几个阶段: 1.构造器被调用 2.Window.Initialized事件被触发 3.Window.Activated ...

  8. java 某字符串在另一字符串中是否存在

    boolean a = 字符串a.contains("字符串b");

  9. JavaScript Patterns 5.9 method() Method

    Advantage Avoid re-created instance method to this inside of the constructor. method() implementatio ...

  10. mapreduce流程中的几个关键点

    MapReduce中数据流动    (1)最简单的过程:  map - reduce    (2)定制了partitioner以将map的结果送往指定reducer的过程: map - partiti ...