列表变量是authorware中最为灵活的变量,它用于存储一组相关的数据,同时并不要求这些数据都属于同一类型。利用authorware提供的列表处理函数,可以很方便地对列表中的数据进行管理。列表可容纳的最大元素数目是32 767。
线性列表的所有元素都被包围在一对方括号([ ])中,每个元素是一个单独的值,元素之间由逗号进行分隔。
可以通过以下几种方式,创建列表型变量。
可以使用赋值语句创建一个列表型变量,例如程序语句:
linearlist:= [ ]
产生一个空白的名为linearlist的线性列表,而程序语句:
linearlist:=[ "a", "u", "t", "h", "o", "r"]
产生一个包含有6个字符型元素的线性列表。
系统函数array用于快速创建具有多个相同元素的列表。例如程序语句:
linearlist:=array(0, 6)
产生一个具有6个元素的线性列表,即[0, 0, 0, 0, 0, 0]。
系统函数list可以将字符串形式的数值序列转换为列表。例如程序语句:
linearlist:=list("[1,2,3,4,5,6]")
将产生列表[1, 2, 3, 4, 5, 6]。这一函数通常用于将来自于程序外部(例如文本文件、数据库等)的数据转换为列表。
线性列表按照从左到右的顺序标识其中每一个元素,因此可以使用下标(元素的存储位置)对线性列表中的数据进行访问,例如程序语句:
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。
通过赋值语句或函数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。
使用函数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( )向列表中指定位置处插入新的元素,列表就被重新标记为未排序。
属性列表用于存储属性和对应的属性值,其中每个元素由一个属性标识符及其对应的属性值构成,属性标识符和属性值之间由冒号进行分隔。例如[#type:#text, #rect:rect(142, 76, 272, 92), #text:"hello, welcome."]就是用于描述一个文本对象的属性列表。
可以使用赋值语句创建一个属性列表,例如程序语句
proplist:= [:]
产生一个空白的名为proplist的属性列表,而程序语句
proplist:= [#a:1, #c:2, #b:3]
产生一个包含有3个元素的属性列表。
属性列表以属性标识符标识其中每一个元素。因此可以使用属性标识符作为下标,访问不同属性对应的属性值,例如程序语句
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个元素的属性值)。
系统函数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()仅删除第一个具有特定属性的元素。
函数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]。
多维列表就是以列表为元素的列表,例如描述一个【显示】设计图标中图像对象和文本对象的列表:
[[#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。
可以使用赋值语句创建一个多维列表,例如程序语句
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:""]]。
在通过下标访问多维列表中的数据时,需要按照从外向内的顺序输入数据在列表每一维中所处的位置,例如程序语句:
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:""]]。
新闻热点
疑难解答