首页 > 网站 > 媒体动画 > 正文

Authorware基础教程:authorware7程序设计基本的教学文章--运用列表

2024-09-08 19:26:44
字体:
来源:转载
供稿:网友

3.3  使用列表

列表变量是authorware中最为灵活的变量,它用于存储一组相关的数据,同时并不要求这些数据都属于同一类型。利用authorware提供的列表处理函数,可以很方便地对列表中的数据进行管理。列表可容纳的最大元素数目是32 767。

3.3.1  线性列表

线性列表的所有元素都被包围在一对方括号([ ])中,每个元素是一个单独的值,元素之间由逗号进行分隔。

3.3.1.1  创建

可以通过以下几种方式,创建列表型变量。

1.通过赋值语句

可以使用赋值语句创建一个列表型变量,例如程序语句:

linearlist:= [ ]

产生一个空白的名为linearlist的线性列表,而程序语句:

linearlist:=[ "a", "u", "t", "h", "o", "r"]

产生一个包含有6个字符型元素的线性列表。

2.通过array()

系统函数array用于快速创建具有多个相同元素的列表。例如程序语句:

linearlist:=array(0, 6)

产生一个具有6个元素的线性列表,即[0, 0, 0, 0, 0, 0]。

3.通过list()

系统函数list可以将字符串形式的数值序列转换为列表。例如程序语句:

linearlist:=list("[1,2,3,4,5,6]")

将产生列表[1, 2, 3, 4, 5, 6]。这一函数通常用于将来自于程序外部(例如文本文件、数据库等)的数据转换为列表。

3.3.1.2  访问列表中的元素

线性列表按照从左到右的顺序标识其中每一个元素,因此可以使用下标(元素的存储位置)对线性列表中的数据进行访问,例如程序语句:

linearlist:=[ "a", "u", "t", "h", "o", "r"]

myvariable:= linearlist[1]

将变量myvariable赋值为"a",而程序语句:

linearlist[1]:= "a"

将线性列表linearlist的第一个元素赋值为"a",此时变量linearlist的值为[ "a", "u", "t", "h", "o", "r"]。

使用变量和循环语句控制列表的下标,可以实现遍历列表中每个元素的目的。例如以下代码实现对列表中所有元素求和的功能:

thesum:=0

linearlist:=[1997,1998,1999,2000,2001,2002,2003,2004,2005]

repeat with i:=1 to listcount(linearlist)

   thesum:=thesum+linearlist[i]

end repeat

坐标变量和矩形变量是两类特殊的线性列表,其中包含的坐标也可以通过下标进行访问。以下程序语句创建了一个坐标变量mypoint和一个矩形变量myrect:

mypoint:= point(100, 120)

myrect:= rect(point(10, 20), point( 30, 40))

mypoint的横坐标以mypoint[1]表示,而myrect左上角的纵坐标以myrect[2]表示。

除了使用下标,还可以通过函数valueatindex(anylist, index )对线性列表中的元素进行访问,该函数返回线性列表中指定位置处的元素值,如果参数anylist不是一个列表,或者索引号index小于1或不存在,该函数返回0。例如

linearlist:=[ "a", "u", "t", "h", "o", "r"]

myvariable:= valueatindex(linearlist, 3 )

获得第3个元素的值"t",而valueatindex(myrect, 3)返回矩形右下角的横坐标30。

3.3.1.3  增加、删除元素

通过赋值语句或函数addlinear(linearlist, value [, index])可以向线性列表中增加新的元素,例如赋值语句

linearlist:=[ "a", "u", "t", "h", "o", "r"]

linearlist[7]:= "w"

linearlist[8]:= "a"

向线性列表linearlist中增加两个元素,此时变量linearlist的值为["a", "u", "t", "h", "o", "r", "w", "a"]。如果元素下标跳跃式增加,则被忽略的元素自动被赋值为0。例如赋值语句

linearlist[10]:= "e"

使变量linearlist的值变为[ "a", "u", "t", "h", "o", "r", "w", "a", 0, "e"]

函数addlinear(linearlist, value [, index])用于向列表linearlist中指定位置处(通过索引参数index指定)插入值为value的元素。函数deleteatindex(anylist, index)用于删除列表中指定位置处的元素。函数findvalue(anylist, value [, index])用于在列表中查找具有指定值的元素。使用以下代码,可以将linearlist中无用的元素0替换为"r":

index:=findvalue(linearlist, 0 )

deleteatindex( linearlist, index)

addlinear(linearlist, "r", index)

使变量linearlist的值变为["a", "u", "t", "h", "o", "r", "w", "a", "r", "e"]。替换指定元素的功能也可以通过函数调用

setatindex(linearlist, "r", index)

或者赋值语句

    linearlist[index]:= "r"

来实现。

如果省略索引参数,则对于未排序的线性列表,该函数向线性列表的末尾添加新的元素,而对于已排序的线性列表,authorware将根据value的值,自动将新的元素插入到线性列表中合适的位置,从而保持元素间的排序方式。如果索引跳跃式增加,则被忽略的元素自动被赋值为0。

3.3.1.4  排序

使用函数sortbyvalue(anylist1 [, anylist2,..., anylist10] [, order])可以按照元素的值对列表进行排序并标上排序标记。设置order为true时按升序排序,否则按照降序排序。如果需要对单个列表进行排序,例如对线性列表linearlist进行排序,可以按照如下方式使用排序函数

linearlist:= ["a", "u", "t", "h", "o", "r", "w", "a", "r", "e"]

sortbyvalue(linearlist, true)

结果是将linearlist的值转变为["a", "a", "e", "h", "o", "r", "r", "t", "u", "w"]。

该函数可以按照参数中第一个列表的顺序排列多个列表,即将相关的多个列表以第一个列表为基准同时进行排序。例如,现有两个线性列表,分别记录了三种商品的名称和对应的价格:

lista:=["ball", "apple", "cat"]

listb:=[30, 10, 20]

使用sortbyvalue(lista ,listb, true)可以按照商品名称进行升序排序,此时lisrta= ["apple", "ball", "cat"],listb= [10, 30, 20]。

使用sortbyvalue(listb, lista, false)可以按照商品价格进行降序排序,此时listb= [30, 20, 10],lisrta= ["ball", "cat", "apple"]。

从上面的排序结果可知,在以某一个列表为基准进行排序的同时,维持了数据间的相对关系,即同一种商品的名称和价格始终相对应。如果多个列表的元素数目不一致,该函数不进行排序。

列表在排序之后,被authorware标记为已排序,此后如果对列表进行了改变元素顺序的操作,比如使用函数addlinear( )向列表中指定位置处插入新的元素,列表就被重新标记为未排序。

3.3.2  属性列表

属性列表用于存储属性和对应的属性值,其中每个元素由一个属性标识符及其对应的属性值构成,属性标识符和属性值之间由冒号进行分隔。例如[#type:#text, #rect:rect(142, 76, 272, 92), #text:"hello, welcome."]就是用于描述一个文本对象的属性列表。

3.3.2.1  创建

可以使用赋值语句创建一个属性列表,例如程序语句

proplist:= [:]

产生一个空白的名为proplist的属性列表,而程序语句

proplist:= [#a:1, #c:2, #b:3]

产生一个包含有3个元素的属性列表。

3.3.2.2  访问列表中的元素

属性列表以属性标识符标识其中每一个元素。因此可以使用属性标识符作为下标,访问不同属性对应的属性值,例如程序语句

proplist:= [#a:1, #c:2, #b:3]

myvariable:= proplist[#a]

将变量myvariable赋值为1,而程序语句

proplist[#b]:= 4

将属性列表proplist中第3个元素(即由#b标识的元素)的属性值设置为4,此时变量proplist的值为[#a:1, #c:2, #b:4]。

函数propertyatindex(proplist, index)可以获得属性列表中指定索引位置的元素的属性,如果参数proplist不是一个属性列表,或者索引号index小于1或不存在,该函数返回空值。例如propertyatindex (proplist, 2 )返回#c(即第2个元素的属性标识符)。

函数valueatindex(proplist, index)可以求出属性列表中指定索引位置的元素的属性值,如果参数proplist不是一个列表,或者索引号index小于1或不存在,该函数返回空串。例如valueatindex (proplist, 2 )返回2(即第2个元素的属性值)。

3.3.2.3  增加、删除元素

系统函数addproperty()用于向属性列表中增加新的元素。例如以下程序语句:

proplist:=[:]

addproperty(proplist, #name, "john")

addproperty(proplist, #userid, "1234-5678")

addproperty(proplist, #password, "3721")

创建出一个用于描述个人信息的属性列表[#name:"john", #userid:"1234-5678", #password: "3721"]。

函数deleteatproperty(proplist, #property)用于删除具有特定属性的元素,例如以下程序语句:

deleteatproperty(proplist, #password)

使属性列表proplist的值变为[#name:"john", #userid:"1234-5678"]。属性列表中可能存在重复的属性,在这种情况下函数deleteatproperty()仅删除第一个具有特定属性的元素。

3.3.2.4  排序

函数sortbyproperty(propertylist1 [, propertylist2,..., propertylist10] [, order])可以按照属性标识符对属性列表进行排序,函数sortbyvalue(anylist1 [, anylist2,..., anylist10] [, order])可以按照属性值对属性列表进行排序,属性列表在排序之后被做上排序标记。设置order为true时按升序排序,否则按照降序排序。如果需要对单个属性列表进行排序,例如对属性列表proplist2按照属性值进行降序排序,可以按照如下方式使用排序函数:

sortbyvalue(proplist2 , false)

结果是将proplist2的值变为[#b:4, #c:2, #a:1]。对属性列表proplist2按照属性标识符进行升序排序,可以按照如下方式使用排序函数:

sortbyproperty(proplist2,true)

结果是将proplist2的值变为[#a:1, #b:4, #c:2]。

使用排序函数可以对多个属性列表进行排序。例如,现有如下两个属性列表:

lista:=[#z:1, #x:2, #y:3]

listb:=[#a:1, #c:2, #b:3]

使用sortbyproperty(lista, listb, true)可以按照lista属性列表的属性标识符进行升序排序,此时lista = [#x:2, #y:3, #z:1],listb = [#c:2, #b:3, #a:1]。

使用sortbyvalue(listb, lista, false)可以按照listb属性列表的属性值进行降序排序,此时listb = [#b:3, #c:2, #a:1],lista = [#y:3, #x:2, #z:1]。

3.3.3  多维列表

多维列表就是以列表为元素的列表,例如描述一个【显示】设计图标中图像对象和文本对象的列表:

[[#type:#image, #rect:rect(12, 57, 377, 219), #filename:"c://my picture//01.bmp", #storage:#external, #format:"bmp"], [#type:#text, #rect:rect(230, 22, 316, 54), #text:"hello world!"]]

就是一个具有两个元素的二维列表,其中每个元素都是一个一维属性列表。在aws中,多维列表的最大维数是10。

3.3.3.1  创建

可以使用赋值语句创建一个多维列表,例如程序语句

list:= [ [0,0],[0,0],[0,0],[0,0] ]

创建了一个二维列表,其中每个元素被初始化为[0,0]。另外,还可以使用系统函数array(value, dim1 [, dim2, dim3, ...dim10])创建一个以数值value进行填充的多维列表,参数dim1~dim10决定每一维中的元素数目。例如程序语句:

list:=array(9,3,4)

创建了一个有3个列表元素的二维列表,其中每个元素被初始化为具有4个元素的一维列表[9,9,9,9],变量list的值为[[9, 9, 9, 9], [9, 9, 9, 9], [9, 9, 9, 9]]。以下程序语句用于创建具有3个属性列表元素的二维列表

multiproplist:=[]

multiproplist:= array([#name:"", #userid:"", #password:""], 3 )

变量multiproplist的值为[[#name:"", #userid:"", #password:""], [#name:"", #userid:"", #password:""], [#name:"", #userid:"", #password:""]]。

3.3.3.2  访问多维列表中的元素

在通过下标访问多维列表中的数据时,需要按照从外向内的顺序输入数据在列表每一维中所处的位置,例如程序语句:

list:=array(9,3,4)

list[2,3]:=0

将列表list的第二个元素(第一维中)中的第三个元素(第二维中)赋值为0,变量list的值变为[[9, 9, 9, 9], [9, 9, 0, 9], [9, 9, 9, 9]]。而程序语句:

list[2]:=[1, 2, 3, 4]

将列表list的第二个元素(第一维中)赋值为[1, 2, 3, 4],变量list的值变为[[9, 9, 9, 9], [1, 2, 3, 4], [9, 9, 9, 9]]。

以下程序语句创建一个由个人记录组成的数据表(二维列表),并对其中第一个记录进行初始化:

multiproplist:=[]

repeat with i:= 1 to 3

   addlinear( multiproplist, [#name:"", #userid:"", #password:""] )

end repeat

multiproplist[1][#name]="tom"

multiproplist[1][# userid]="8765-4321"

multiproplist[1][# password]="7up8down"

变量multiproplist的值为: [[#name:"tom", #userid:" 8765-4321", #password:"7up8down"], [#name:"", #userid:"", #password:""], [#name:"", #userid:"", #password:""]]。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表