列表變量是authorware中最為靈活的變量,它用于存儲一組相關(guān)的數(shù)據(jù),同時并不要求這些數(shù)據(jù)都屬于同一類型。利用authorware提供的列表處理函數(shù),可以很方便地對列表中的數(shù)據(jù)進行管理。列表可容納的最大元素數(shù)目是32 767。
線性列表的所有元素都被包圍在一對方括號([ ])中,每個元素是一個單獨的值,元素之間由逗號進行分隔。
可以通過以下幾種方式,創(chuàng)建列表型變量。
可以使用賦值語句創(chuàng)建一個列表型變量,例如程序語句:
linearlist:= [ ]
產(chǎn)生一個空白的名為linearlist的線性列表,而程序語句:
linearlist:=[ "a", "u", "t", "h", "o", "r"]
產(chǎn)生一個包含有6個字符型元素的線性列表。
系統(tǒng)函數(shù)array用于快速創(chuàng)建具有多個相同元素的列表。例如程序語句:
linearlist:=array(0, 6)
產(chǎn)生一個具有6個元素的線性列表,即[0, 0, 0, 0, 0, 0]。
系統(tǒng)函數(shù)list可以將字符串形式的數(shù)值序列轉(zhuǎn)換為列表。例如程序語句:
linearlist:=list("[1,2,3,4,5,6]")
將產(chǎn)生列表[1, 2, 3, 4, 5, 6]。這一函數(shù)通常用于將來自于程序外部(例如文本文件、數(shù)據(jù)庫等)的數(shù)據(jù)轉(zhuǎn)換為列表。
線性列表按照從左到右的順序標識其中每一個元素,因此可以使用下標(元素的存儲位置)對線性列表中的數(shù)據(jù)進行訪問,例如程序語句:
linearlist:=[ "a", "u", "t", "h", "o", "r"]
myvariable:= linearlist[1]
將變量myvariable賦值為"a",而程序語句:
linearlist[1]:= "a"
將線性列表linearlist的第一個元素賦值為"a",此時變量linearlist的值為[ "a", "u", "t", "h", "o", "r"]。
使用變量和循環(huán)語句控制列表的下標,可以實現(xiàn)遍歷列表中每個元素的目的。例如以下代碼實現(xiàn)對列表中所有元素求和的功能:
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
坐標變量和矩形變量是兩類特殊的線性列表,其中包含的坐標也可以通過下標進行訪問。以下程序語句創(chuàng)建了一個坐標變量mypoint和一個矩形變量myrect:
mypoint:= point(100, 120)
myrect:= rect(point(10, 20), point( 30, 40))
mypoint的橫坐標以mypoint[1]表示,而myrect左上角的縱坐標以myrect[2]表示。
除了使用下標,還可以通過函數(shù)valueatindex(anylist, index )對線性列表中的元素進行訪問,該函數(shù)返回線性列表中指定位置處的元素值,如果參數(shù)anylist不是一個列表,或者索引號index小于1或不存在,該函數(shù)返回0。例如
linearlist:=[ "a", "u", "t", "h", "o", "r"]
myvariable:= valueatindex(linearlist, 3 )
獲得第3個元素的值"t",而valueatindex(myrect, 3)返回矩形右下角的橫坐標30。
通過賦值語句或函數(shù)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的值變?yōu)閇 "a", "u", "t", "h", "o", "r", "w", "a", 0, "e"]
函數(shù)addlinear(linearlist, value [, index])用于向列表linearlist中指定位置處(通過索引參數(shù)index指定)插入值為value的元素。函數(shù)deleteatindex(anylist, index)用于刪除列表中指定位置處的元素。函數(shù)findvalue(anylist, value [, index])用于在列表中查找具有指定值的元素。使用以下代碼,可以將linearlist中無用的元素0替換為"r":
index:=findvalue(linearlist, 0 )
deleteatindex( linearlist, index)
addlinear(linearlist, "r", index)
使變量linearlist的值變?yōu)閇"a", "u", "t", "h", "o", "r", "w", "a", "r", "e"]。替換指定元素的功能也可以通過函數(shù)調(diào)用
setatindex(linearlist, "r", index)
或者賦值語句
linearlist[index]:= "r"
來實現(xiàn)。
如果省略索引參數(shù),則對于未排序的線性列表,該函數(shù)向線性列表的末尾添加新的元素,而對于已排序的線性列表,authorware將根據(jù)value的值,自動將新的元素插入到線性列表中合適的位置,從而保持元素間的排序方式。如果索引跳躍式增加,則被忽略的元素自動被賦值為0。
使用函數(shù)sortbyvalue(anylist1 [, anylist2,..., anylist10] [, order])可以按照元素的值對列表進行排序并標上排序標記。設(shè)置order為true時按升序排序,否則按照降序排序。如果需要對單個列表進行排序,例如對線性列表linearlist進行排序,可以按照如下方式使用排序函數(shù)
linearlist:= ["a", "u", "t", "h", "o", "r", "w", "a", "r", "e"]
sortbyvalue(linearlist, true)
結(jié)果是將linearlist的值轉(zhuǎn)變?yōu)閇"a", "a", "e", "h", "o", "r", "r", "t", "u", "w"]。
該函數(shù)可以按照參數(shù)中第一個列表的順序排列多個列表,即將相關(guān)的多個列表以第一個列表為基準同時進行排序。例如,現(xiàn)有兩個線性列表,分別記錄了三種商品的名稱和對應(yīng)的價格:
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"]。
從上面的排序結(jié)果可知,在以某一個列表為基準進行排序的同時,維持了數(shù)據(jù)間的相對關(guān)系,即同一種商品的名稱和價格始終相對應(yīng)。如果多個列表的元素數(shù)目不一致,該函數(shù)不進行排序。
列表在排序之后,被authorware標記為已排序,此后如果對列表進行了改變元素順序的操作,比如使用函數(shù)addlinear( )向列表中指定位置處插入新的元素,列表就被重新標記為未排序。
屬性列表用于存儲屬性和對應(yīng)的屬性值,其中每個元素由一個屬性標識符及其對應(yīng)的屬性值構(gòu)成,屬性標識符和屬性值之間由冒號進行分隔。例如[#type:#text, #rect:rect(142, 76, 272, 92), #text:"hello, welcome."]就是用于描述一個文本對象的屬性列表。
可以使用賦值語句創(chuàng)建一個屬性列表,例如程序語句
proplist:= [:]
產(chǎn)生一個空白的名為proplist的屬性列表,而程序語句
proplist:= [#a:1, #c:2, #b:3]
產(chǎn)生一個包含有3個元素的屬性列表。
屬性列表以屬性標識符標識其中每一個元素。因此可以使用屬性標識符作為下標,訪問不同屬性對應(yīng)的屬性值,例如程序語句
proplist:= [#a:1, #c:2, #b:3]
myvariable:= proplist[#a]
將變量myvariable賦值為1,而程序語句
proplist[#b]:= 4
將屬性列表proplist中第3個元素(即由#b標識的元素)的屬性值設(shè)置為4,此時變量proplist的值為[#a:1, #c:2, #b:4]。
函數(shù)propertyatindex(proplist, index)可以獲得屬性列表中指定索引位置的元素的屬性,如果參數(shù)proplist不是一個屬性列表,或者索引號index小于1或不存在,該函數(shù)返回空值。例如propertyatindex (proplist, 2 )返回#c(即第2個元素的屬性標識符)。
函數(shù)valueatindex(proplist, index)可以求出屬性列表中指定索引位置的元素的屬性值,如果參數(shù)proplist不是一個列表,或者索引號index小于1或不存在,該函數(shù)返回空串。例如valueatindex (proplist, 2 )返回2(即第2個元素的屬性值)。
系統(tǒng)函數(shù)addproperty()用于向?qū)傩粤斜碇性黾有碌脑?。例如以下程序語句:
proplist:=[:]
addproperty(proplist, #name, "john")
addproperty(proplist, #userid, "1234-5678")
addproperty(proplist, #password, "3721")
創(chuàng)建出一個用于描述個人信息的屬性列表[#name:"john", #userid:"1234-5678", #password: "3721"]。
函數(shù)deleteatproperty(proplist, #property)用于刪除具有特定屬性的元素,例如以下程序語句:
deleteatproperty(proplist, #password)
使屬性列表proplist的值變?yōu)閇#name:"john", #userid:"1234-5678"]。屬性列表中可能存在重復(fù)的屬性,在這種情況下函數(shù)deleteatproperty()僅刪除第一個具有特定屬性的元素。
函數(shù)sortbyproperty(propertylist1 [, propertylist2,..., propertylist10] [, order])可以按照屬性標識符對屬性列表進行排序,函數(shù)sortbyvalue(anylist1 [, anylist2,..., anylist10] [, order])可以按照屬性值對屬性列表進行排序,屬性列表在排序之后被做上排序標記。設(shè)置order為true時按升序排序,否則按照降序排序。如果需要對單個屬性列表進行排序,例如對屬性列表proplist2按照屬性值進行降序排序,可以按照如下方式使用排序函數(shù):
sortbyvalue(proplist2 , false)
結(jié)果是將proplist2的值變?yōu)閇#b:4, #c:2, #a:1]。對屬性列表proplist2按照屬性標識符進行升序排序,可以按照如下方式使用排序函數(shù):
sortbyproperty(proplist2,true)
結(jié)果是將proplist2的值變?yōu)閇#a:1, #b:4, #c:2]。
使用排序函數(shù)可以對多個屬性列表進行排序。例如,現(xiàn)有如下兩個屬性列表:
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]。
多維列表就是以列表為元素的列表,例如描述一個【顯示】設(shè)計圖標中圖像對象和文本對象的列表:
[[#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中,多維列表的最大維數(shù)是10。
可以使用賦值語句創(chuàng)建一個多維列表,例如程序語句
list:= [ [0,0],[0,0],[0,0],[0,0] ]
創(chuàng)建了一個二維列表,其中每個元素被初始化為[0,0]。另外,還可以使用系統(tǒng)函數(shù)array(value, dim1 [, dim2, dim3, ...dim10])創(chuàng)建一個以數(shù)值value進行填充的多維列表,參數(shù)dim1~dim10決定每一維中的元素數(shù)目。例如程序語句:
list:=array(9,3,4)
創(chuàng)建了一個有3個列表元素的二維列表,其中每個元素被初始化為具有4個元素的一維列表[9,9,9,9],變量list的值為[[9, 9, 9, 9], [9, 9, 9, 9], [9, 9, 9, 9]]。以下程序語句用于創(chuàng)建具有3個屬性列表元素的二維列表
multiproplist:=[]
multiproplist:= array([#name:"", #userid:"", #password:""], 3 )
變量multiproplist的值為[[#name:"", #userid:"", #password:""], [#name:"", #userid:"", #password:""], [#name:"", #userid:"", #password:""]]。
在通過下標訪問多維列表中的數(shù)據(jù)時,需要按照從外向內(nèi)的順序輸入數(shù)據(jù)在列表每一維中所處的位置,例如程序語句:
list:=array(9,3,4)
list[2,3]:=0
將列表list的第二個元素(第一維中)中的第三個元素(第二維中)賦值為0,變量list的值變?yōu)閇[9, 9, 9, 9], [9, 9, 0, 9], [9, 9, 9, 9]]。而程序語句:
list[2]:=[1, 2, 3, 4]
將列表list的第二個元素(第一維中)賦值為[1, 2, 3, 4],變量list的值變?yōu)閇[9, 9, 9, 9], [1, 2, 3, 4], [9, 9, 9, 9]]。
以下程序語句創(chuàng)建一個由個人記錄組成的數(shù)據(jù)表(二維列表),并對其中第一個記錄進行初始化:
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:""]]。
新聞熱點
疑難解答