列表變量是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:""]]。
新聞熱點
疑難解答