- 浏览: 67166 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
zhoujunying:
谢谢!!
flex 15秒超时 -
hiphunter921:
你settimeout写的对么?setTimeout(show ...
flex 15秒超时 -
zhoujunying:
为什么我的用settimeout还是会出现超时现象!!!
fu ...
flex 15秒超时 -
hiphunter921:
我所谓的是html里面的object标签,flash就是一个o ...
FABridge.js中的一个小问题 -
fhuan123:
您好,我也遇上了FABridge.bridgeName.roo ...
FABridge.js中的一个小问题
今天在一个concrete example 中看到了:var unseenEmails:Vector.<EmailHeader> = new Vector.<EmailHeader>();这样的写法,突然眼前一亮,貌似和java中的generics很像,于是特地google了一下Vector这个类,并找到如下说明,特此记录一笔。
http://www.adobechinadeveloper.com/Newsletter/articles/FlashVector.html 写道
创建一个VECTOR实例
Vector对象是一个有序数组,它仅存储一个类的值。一个特殊的Vector对象存储类被认为是Vector的基本类型。你可以在声明 Vector对象是指明基本类型,也可以当你创建Vecotr对象调用构造函数时指明。正如你所期望的,对一个Vector变量指明的积累比较与调用构造函数时指明的基类一致。
当创建一个Vector实例时,为了明确它的基类型,你需要添加额外的信息到Vector类名上,使用一种类型参数的语法。例如,下面的句子声明了一个名为myVector的Vector变量,使用类型参数语法来明确Vector存储在myVector中仅能包含String值
var myVector:Vector.<String>;
当你使用Vector类的构造函数创建对象是也可以使用同样的语法:
myVector = new Vector.<String>();
做为一个规则,当类名Vector出现在你的代码中时,通常会有类型参数一起使用。
当然,你可以在一行代码中组合声明变量和构造函数实例;
var myVector:Vector.<String> = new Vector.<String>();
尽管在这篇快速入门中所给的示例都比较简单,例如创建String和Number作为Vector的基类型,实际上,Vector类的基类型可以是任何类。这也包括你定义的自定义类。例如,假设你的代码定义了一个名为MyClass的类。在这种情况下,下面的代码是有效的,它将创建一个 Vector对象,它的元素都必须是MyClass实例:
var v:Vector.<MyClass> = new Vector.<MyClass>();
预先定义Vector的长度
Vector类构造函数有两个可选参数,它允许你明确你的Vector实例的数量。第一个参数是length参数。默认情况下,当一个Vector被创建时,它是空的(它有0个元素)。然而,如果你传递一个值给length参数,明确元素数量的Vector实例就被创建了:
var myVector:Vector.<String> = new Vector.<String>(7); // myVector is created with 7 elements
预先确定Vector的大小比一次创建一个元素效率要高,所以,如果你提前知道Vector包含有多少元素,提供一个length参数值是比较好的。如果 Vector的基类型是一个Boolean或者一个数值类型(Number,int,uint),每个元素都会被赋予这个数据类型的默认值 (Boolean的默认值false,数据类型默认值0)。否则,每个元素初始值为null。
创建一个可动态调整长度的Vector
Vector对象的另一个特征就是他们可以调整长度,这意味着你可以改变值,但是不能通过添加或删除元素来改变总数。默认地,一个Vector实例是不允许动态修改长度的。要创建一个可修改长度的Vector,将Vector类构造函数的第二个参数(fixed参数)设置为 true:
var myVector:Vector.<String> = new Vector.<String>(7, true); // myVector's length is fixed to 7 elements
[b]注意:[/b][i]你可以在任何时候修改Vector对象的fixed属性来设置Vector的长度是否可变。[/i]
myVector.fixed = false; // myVector's length is no longer fixed
添加值到Vector对象中
除了一个额外的限制之外,添加一个值到Vector对象中与添加一个值到Array对象中类似。一个Vector对象的每个元素必须有一个值(或者 null)。换句话说,你不能在一个序号为4的位置添加一个值,除非Vector的1-3为已经有值了。在实际中,这意味着要添加一个新的元素到 Vector中,你必须在等于Vector对象长度的序号位置添加它。(因为Vector的第一个元素序号为0,所以length属性的值通常比 Vector最后一个元素的序号要大。)下面的代码演示了这一技巧:
var names:Vector.<String> = new Vector.<String>();
// ... assume some elements are added ...
// Add an element to the end of the Vector
names[names.length] = "Bob";
除了使用array访问符([])操作添加一个值到Vector对象中外,你也可以使用Vector对象的push()或者 unshift()方法来添加元素到Vector中。就像Array类一样,push()方法创建了一个新元素在Vector最后一个元素的末尾,unshift()方法创建了一个新元素在Vector序号为0的位置(同时将所有已经存在的元素移位值高一位的位置):
names.push("Harold"); // adds the value "Harold" to the end of the Vector
names.unshift("Fred"); // adds the value "Fred" to the start of the Vector
这些方法还有额外的优势是,你可以传递多个值做为参数给方法,所有的值都会一次性添加到Vector对象中。然后,这种弹性的方式也会导致一个后果。当你使用push()或者unshift()方法添加值到Vector对象时,编译器不能检查数据类型是否匹配。因为,任何使用push() 或者unshift()添加错误类型的值到Vector对象中的代码知道运行代码时才会被发现。
从Vector对象中恢复值
从Vector对象中恢复值与从一个Array对象中恢复值完全一样。要从特定序号位置回复元素值,你需要使用数组访问符([])操作来明确你需要的元素序号:
var name1:String = names[0];
使用数组访问符([])操作恢复值,但是不会将它从Vector对象中移除。要恢复值并且将它从Vector对象中移除,请使用pop()方法(它会移除最后的一个元素)或者shift()方法(它会移除第0个元素,并且所有元素减一位):
var finalName:String = names.pop(); // removes the last value from the Vector
var firstName:String = names.shift(); // removes the first value from the Vector
将一个Vector的值进行排序
大部分使用Vector对象的方法与使用Array对象的方法都一样。有一个方法你需要知道的不一样的是在Vector对象元素排序。Vector类仅有一个方法给值排序:sort()方法。sort()方法不会更改原始的Vector对象。取而代之,它返回具有相同基类型包含已排序了值的一个新的 Vector。
当你使用Vector类的sort()方法时,它没有默认的排序行为,即使是基本的数据类型如Number或者String。正因为如此,任何时候你使用 sort()方法,你都需要指明一个自定义的排序函数来定义排序逻辑。例如,下面的代码中,一个Number类型的Vector对象使用sort()方法来排序。在这个案例中,这个代码演示了基本的数据排序;小的数字放在大的数字前面(升序排列)。名为sortNumbers()的函数定义了排序行为,它做为一个参数传递给了sort()方法调用。Flash Player给每个数字排序时,它调用sortNumber()函数,将要进行比较的两个数值传递给函数,结果决定最终排序的顺序:
var numberVector:Vector.<Number> = new Vector.<Number>();
numberVector.push(2, 17, 3.6, 4.4, 29, -34, 0.09235);
trace(numberVector); // output: 2,17,3.6,4.4,29,-34,0.09235
var sortedVector:Vector.<Number> = numberVector.sort(sortNumbers);
trace(sortedVector); // output: -34,0.09235,2,3.6,4.4,17,29
function sortNumbers(x:Number, y:Number):Number
{
if (x < y)
{
return -1;
}
else if (x > y)
{
return 1;
}
else
{
return 0;
}
}
你可以定义为任意数据类型定义一个排序函数。例如,下面的代码为Vector的Person对象根据姓(last name)进行了排序,然后名(first name)(它假定了有一个Person类具有firstName和lastName属性):
var personVector:Vector.<Person> = new Vector.<Person>();
personVector[0] = new Person("Bob", "Smith");
personVector[1] = new Person("Harold", "Johnson");
personVector[2] = new Person("Barbara", "Smith");
personVector[3] = new Person("Arnold", "Anderson");
personVector[4] = new Person("Margaret", "Wooster");
output:[Smith,Bob],[Johnson,Harold],[Smith,Barbara],[Anderson,Arnold],[Wooster,Margaret]
trace(personVector);
var sortedVector:Vector.<Person> = personVector.sort(sortPeople);
// output:[Anderson,Arnold],[Johnson,Harold],[Smith,Barbara],[Smith,Bob],[Wooster,Margaret]
trace(sortedVector);
function sortPeople(x:Person, y:Person):Number
{
// sort by last name
var lastNameSort:Number = sortStrings(x.lastName, y.lastName);
if (lastNameSort?!= 0)
{
return lastNameSort;
}
else
{
// if the last names are identical, sort by first name
return sortStrings(x.firstName, y.firstName);
}
}
function sortStrings(x:String, y:String):Number
{
if (x < y)
{
return -1;
}
else if (x > y)
{
return 1;
}
else
{
return 0;
}
}
}
Vector对象是一个有序数组,它仅存储一个类的值。一个特殊的Vector对象存储类被认为是Vector的基本类型。你可以在声明 Vector对象是指明基本类型,也可以当你创建Vecotr对象调用构造函数时指明。正如你所期望的,对一个Vector变量指明的积累比较与调用构造函数时指明的基类一致。
当创建一个Vector实例时,为了明确它的基类型,你需要添加额外的信息到Vector类名上,使用一种类型参数的语法。例如,下面的句子声明了一个名为myVector的Vector变量,使用类型参数语法来明确Vector存储在myVector中仅能包含String值
var myVector:Vector.<String>;
当你使用Vector类的构造函数创建对象是也可以使用同样的语法:
myVector = new Vector.<String>();
做为一个规则,当类名Vector出现在你的代码中时,通常会有类型参数一起使用。
当然,你可以在一行代码中组合声明变量和构造函数实例;
var myVector:Vector.<String> = new Vector.<String>();
尽管在这篇快速入门中所给的示例都比较简单,例如创建String和Number作为Vector的基类型,实际上,Vector类的基类型可以是任何类。这也包括你定义的自定义类。例如,假设你的代码定义了一个名为MyClass的类。在这种情况下,下面的代码是有效的,它将创建一个 Vector对象,它的元素都必须是MyClass实例:
var v:Vector.<MyClass> = new Vector.<MyClass>();
预先定义Vector的长度
Vector类构造函数有两个可选参数,它允许你明确你的Vector实例的数量。第一个参数是length参数。默认情况下,当一个Vector被创建时,它是空的(它有0个元素)。然而,如果你传递一个值给length参数,明确元素数量的Vector实例就被创建了:
var myVector:Vector.<String> = new Vector.<String>(7); // myVector is created with 7 elements
预先确定Vector的大小比一次创建一个元素效率要高,所以,如果你提前知道Vector包含有多少元素,提供一个length参数值是比较好的。如果 Vector的基类型是一个Boolean或者一个数值类型(Number,int,uint),每个元素都会被赋予这个数据类型的默认值 (Boolean的默认值false,数据类型默认值0)。否则,每个元素初始值为null。
创建一个可动态调整长度的Vector
Vector对象的另一个特征就是他们可以调整长度,这意味着你可以改变值,但是不能通过添加或删除元素来改变总数。默认地,一个Vector实例是不允许动态修改长度的。要创建一个可修改长度的Vector,将Vector类构造函数的第二个参数(fixed参数)设置为 true:
var myVector:Vector.<String> = new Vector.<String>(7, true); // myVector's length is fixed to 7 elements
[b]注意:[/b][i]你可以在任何时候修改Vector对象的fixed属性来设置Vector的长度是否可变。[/i]
myVector.fixed = false; // myVector's length is no longer fixed
添加值到Vector对象中
除了一个额外的限制之外,添加一个值到Vector对象中与添加一个值到Array对象中类似。一个Vector对象的每个元素必须有一个值(或者 null)。换句话说,你不能在一个序号为4的位置添加一个值,除非Vector的1-3为已经有值了。在实际中,这意味着要添加一个新的元素到 Vector中,你必须在等于Vector对象长度的序号位置添加它。(因为Vector的第一个元素序号为0,所以length属性的值通常比 Vector最后一个元素的序号要大。)下面的代码演示了这一技巧:
var names:Vector.<String> = new Vector.<String>();
// ... assume some elements are added ...
// Add an element to the end of the Vector
names[names.length] = "Bob";
除了使用array访问符([])操作添加一个值到Vector对象中外,你也可以使用Vector对象的push()或者 unshift()方法来添加元素到Vector中。就像Array类一样,push()方法创建了一个新元素在Vector最后一个元素的末尾,unshift()方法创建了一个新元素在Vector序号为0的位置(同时将所有已经存在的元素移位值高一位的位置):
names.push("Harold"); // adds the value "Harold" to the end of the Vector
names.unshift("Fred"); // adds the value "Fred" to the start of the Vector
这些方法还有额外的优势是,你可以传递多个值做为参数给方法,所有的值都会一次性添加到Vector对象中。然后,这种弹性的方式也会导致一个后果。当你使用push()或者unshift()方法添加值到Vector对象时,编译器不能检查数据类型是否匹配。因为,任何使用push() 或者unshift()添加错误类型的值到Vector对象中的代码知道运行代码时才会被发现。
从Vector对象中恢复值
从Vector对象中恢复值与从一个Array对象中恢复值完全一样。要从特定序号位置回复元素值,你需要使用数组访问符([])操作来明确你需要的元素序号:
var name1:String = names[0];
使用数组访问符([])操作恢复值,但是不会将它从Vector对象中移除。要恢复值并且将它从Vector对象中移除,请使用pop()方法(它会移除最后的一个元素)或者shift()方法(它会移除第0个元素,并且所有元素减一位):
var finalName:String = names.pop(); // removes the last value from the Vector
var firstName:String = names.shift(); // removes the first value from the Vector
将一个Vector的值进行排序
大部分使用Vector对象的方法与使用Array对象的方法都一样。有一个方法你需要知道的不一样的是在Vector对象元素排序。Vector类仅有一个方法给值排序:sort()方法。sort()方法不会更改原始的Vector对象。取而代之,它返回具有相同基类型包含已排序了值的一个新的 Vector。
当你使用Vector类的sort()方法时,它没有默认的排序行为,即使是基本的数据类型如Number或者String。正因为如此,任何时候你使用 sort()方法,你都需要指明一个自定义的排序函数来定义排序逻辑。例如,下面的代码中,一个Number类型的Vector对象使用sort()方法来排序。在这个案例中,这个代码演示了基本的数据排序;小的数字放在大的数字前面(升序排列)。名为sortNumbers()的函数定义了排序行为,它做为一个参数传递给了sort()方法调用。Flash Player给每个数字排序时,它调用sortNumber()函数,将要进行比较的两个数值传递给函数,结果决定最终排序的顺序:
var numberVector:Vector.<Number> = new Vector.<Number>();
numberVector.push(2, 17, 3.6, 4.4, 29, -34, 0.09235);
trace(numberVector); // output: 2,17,3.6,4.4,29,-34,0.09235
var sortedVector:Vector.<Number> = numberVector.sort(sortNumbers);
trace(sortedVector); // output: -34,0.09235,2,3.6,4.4,17,29
function sortNumbers(x:Number, y:Number):Number
{
if (x < y)
{
return -1;
}
else if (x > y)
{
return 1;
}
else
{
return 0;
}
}
你可以定义为任意数据类型定义一个排序函数。例如,下面的代码为Vector的Person对象根据姓(last name)进行了排序,然后名(first name)(它假定了有一个Person类具有firstName和lastName属性):
var personVector:Vector.<Person> = new Vector.<Person>();
personVector[0] = new Person("Bob", "Smith");
personVector[1] = new Person("Harold", "Johnson");
personVector[2] = new Person("Barbara", "Smith");
personVector[3] = new Person("Arnold", "Anderson");
personVector[4] = new Person("Margaret", "Wooster");
output:[Smith,Bob],[Johnson,Harold],[Smith,Barbara],[Anderson,Arnold],[Wooster,Margaret]
trace(personVector);
var sortedVector:Vector.<Person> = personVector.sort(sortPeople);
// output:[Anderson,Arnold],[Johnson,Harold],[Smith,Barbara],[Smith,Bob],[Wooster,Margaret]
trace(sortedVector);
function sortPeople(x:Person, y:Person):Number
{
// sort by last name
var lastNameSort:Number = sortStrings(x.lastName, y.lastName);
if (lastNameSort?!= 0)
{
return lastNameSort;
}
else
{
// if the last names are identical, sort by first name
return sortStrings(x.firstName, y.firstName);
}
}
function sortStrings(x:String, y:String):Number
{
if (x < y)
{
return -1;
}
else if (x > y)
{
return 1;
}
else
{
return 0;
}
}
}
发表评论
-
关于RSL的一段翻译
2011-12-13 21:28 1115为了找出可以从代码 ... -
ie中打开flash莫名其妙js报错,qq登陆后不停报错重启 解决方案
2011-02-24 15:31 3236ie中报错:__flash__addCallback(inst ... -
«Flex3宝典»读书笔记(2)
2010-11-14 14:34 018 使用高级列表控件 18.1.1 使用可编辑的Combo ... -
AIR 中 使用 BlazeDS 消息服务
2010-11-10 10:02 2351下载了wing酱的新浪微博AIR版,突然对Adobe AIR ... -
AS3技巧与提示1-8
2010-11-03 16:28 01. 改变影片的帧频 在 ... -
AS3技巧与提示38-44
2010-11-03 16:27 038.is 运算符(对比instanceof) AS3新 ... -
AS3技巧与提示33-37
2010-11-03 16:26 033.将事件处理器作为普通函数调用 AS3中我们定义事件 ... -
AS3技巧与提示29-32
2010-11-03 16:25 029.判断实例所属类及其 ... -
AS3技巧提示14-18
2010-11-03 16:24 014.SimpleButton类 AS3新增一个Simp ... -
AS3技巧提示9-13
2010-11-03 16:23 09.类型转换和as运算符 在必要的时候,AS充许把对象的 ... -
AS3技巧与提示45-48
2010-11-03 16:20 045.无用单元回收:引用计 ... -
AS3技巧提示19-22
2010-11-03 16:18 019.抽象类 AS3仍然不支持抽象类(不能示例化,只是用 ... -
AS3技巧与提示52-60
2010-11-03 16:16 052 用…(rest) 来表示不确定个数的Arguments变 ... -
AS3技巧与提示23-28
2010-11-03 16:13 023.新的深度排序方法 AS3中运用显示列表(displ ... -
AS3技巧与提示49-51
2010-11-03 16:11 049.getBounds()和getRect()对比 ... -
«Flex3宝典»读书笔记(1)
2010-10-30 10:38 0写flex也近一年了,从没 ... -
flex 15秒超时
2010-10-20 15:19 3568在flex中可以通过ExternalInterface调用js ... -
对于datagrid中删除后,对selectedIndex赋值后的问题
2010-07-06 19:30 1731对于datagrid中删除后,想要自动选中下一条记录,如果是最 ... -
FABridge.js中的一个小问题
2010-05-25 14:44 2310今天在尝试使用FABridge来连接flex与js时候,按照一 ... -
JAVA和FLEX整合(blazeds部署过程)
2010-02-10 14:33 2827刚开始时候尝试成功了 ...
相关推荐
Vector AUTOSAR Components各个BSW模块。 1、BSWMD文件:存放arxm文件; 2、Documentation文件:存放关于BswM模块相关配置的说明文档pdf; 3、GeneratorMsr文件:BswM生成相关的工具文件*.jar; 4、Implementation...
Flex Android项目 设置Button的背景色 为button添加背景色属性
FlexGraphics - is a set of components for creating vector graphics applications under Borland Delphi/C++Builder. The library's implementation is based on Windows GDI and supports the following ...
CANoe是德国Vector公司出的一款总线开发环境,全称叫CAN open environment,主要用于汽车总线的开发而设计的。CANoe的前期是为了对CAN通信网络进行建模、仿真、测试和开发,后来扩展加入了LIN、Ethernet、FlexRay、...
问题陈述考虑图结构中Node的以下实现: struct Node{ std::size_t id; void* userData {nullptr}; std::unique_ptr<Node> links;};Node* makeGraphNode(std::size_t id, const std::vector<Node>& links){ auto n = ...
2D向量(Vector2D)类 机车(Vehicle)类 转向机车(SteeredVehicle)类 寻找行为 避开行为 到达行为 追捕行为 躲避行为 漫游行为 对象回避 路径跟随 群落 总结 第三章 等角 投影 等角投影 等角vs二等角(dimetric) 创建等...
const styles = StyleSheet.create({container:{flex:1,backgroundColor:'#FFFFFf',}, logoContainer:{marginTop:48,justifyContent:“ center”,alignItems:“ center”,}, 徽标:{高度:60,宽度...
React本机加载 该软件包提供带有逐帧视图或图像的加载指示器 安装 yarn add react-native-frame-loading # or npm install react-native-frame-...import Icon from "react-native-vector-icons/FontAwesome" const
在偏微分方程系统中输入文字、添加问题描述、及时把问题具体成有限元模型; 自动的网格结构; 无限的方程集合体; 联立方程不限数量; 非线性方程求解; 1D,2D和3D; 时间相关、稳态和特征值; 动态的时间步...
is a set of components for creating vector graphics applications under Delphi/C++Builder. library can be used for creation of plots, drawings, electrical, concept and mnemonic charts as well as for...
ebnf2yacc 版权所有(C)2011-2017 关于 ebnf2yacc是yacc的kleene闭包预处理器。 它采用ebnf规范作为输入并生成yacc语法。 一个激励人的例子 输入: %% program: ... #include <vector> #include ty
What’s Inside Preface 1 Java SE5 and SE6 .................. 2 Java SE6 ............................................The 4th edition...........................Changes ...........................................