640 likes | 813 Views
HTML & ASP 完美的演繹. 第 10 章 陣列. 10.1 前言. 10.2 陣列的宣告及使用. 在 VBScript 中使用陣列 (Array) 的時機是在當您需要處理多個資料的時候,以陣列中的陣列元素來取代多個變數。 陣列必須先經過宣告才能使用 ,由於陣列在宣告的同時,會在記憶體中按照所宣告陣列的種類保留連續空間給此陣列使用,所以陣列經過編譯後可知道陣列中到底含有多少個元素。. 10.2.1 陣列的宣告並設定初始值.
E N D
HTML & ASP 完美的演繹 第10章 陣列
10.2 陣列的宣告及使用 • 在VBScript中使用陣列(Array)的時機是在當您需要處理多個資料的時候,以陣列中的陣列元素來取代多個變數。陣列必須先經過宣告才能使用,由於陣列在宣告的同時,會在記憶體中按照所宣告陣列的種類保留連續空間給此陣列使用,所以陣列經過編譯後可知道陣列中到底含有多少個元素。
10.2.1 陣列的宣告並設定初始值 • 陣列的宣告方式是以Dim敘述開頭,其後緊接陣列名稱,在陣列名稱後面加上一對小括號,小括號內的數值代表該陣列的大小。譬如下面敘述宣告myArray是一個含有11 個元素的陣列: • Dim myArray(10)
我們可以透過Array函式來建立陣列的初值。例如下列寫法是使用一個自由型別(Variant)的變數myArray,接著再使用Array(56, 45, 68, 32) 函式指定初值給myArray。 • myArray=Array(56, 45, 68, 32) • 結果myArray陣列元素內容如下: • myArray(0)=56 : myArray(1)=45 • myArray(2)=68 : myArray(3)=32
另一種寫法就是先宣告myArray為陣列元素個數為4的陣列,然後在一一的指定陣列元素初值。另一種寫法就是先宣告myArray為陣列元素個數為4的陣列,然後在一一的指定陣列元素初值。 • Dim myArray(3) • myArray(0) = 56 • myArray(1) = 45 • myArray(2) = 68 • myArray(3) = 32
因為VBScript中只有自由型別變數,因此陣列即是屬於自由型別陣列,所以在陣列內的陣列元素,允許夾雜不同資料型別的資料。譬如:下面敘述列是合法的宣告:因為VBScript中只有自由型別變數,因此陣列即是屬於自由型別陣列,所以在陣列內的陣列元素,允許夾雜不同資料型別的資料。譬如:下面敘述列是合法的宣告: • myArray = Array(1, "abc", 0, True, -2) • 不過陣列元素間的資料必須是相同的資料型別才允許做運算。在上面例子中由於myArray(0)和myArray(1)的資料型別分別為整數和字串,由於數值與字串不能直接加減會造成錯誤,是不合法的敘述: • myArray(0)+ myArray(1)
10.2.2 使用迴圈存取陣列的內容 • 由於陣列內的註標可以是常數、變數或是運算式。因此,存取陣列可以使用迴圈來控制輸入及輸出。
上面範例中,若表單中需要很多個選項時就必須加入多個核取方塊,那麼在c10_2_4.asp中的第9-13行就必須插入多個If條件敘述,為了解決此問題,我們可以透過Split函式配合陣列來解決。所得的結果和上面範例是一樣的。可參考c10_2_5.htm與c10_2_5.asp範例。上面範例中,若表單中需要很多個選項時就必須加入多個核取方塊,那麼在c10_2_4.asp中的第9-13行就必須插入多個If條件敘述,為了解決此問題,我們可以透過Split函式配合陣列來解決。所得的結果和上面範例是一樣的。可參考c10_2_5.htm與c10_2_5.asp範例。
10.3 多維陣列 • 前面所提到的陣列其註標(或稱索引)只有一個,我們稱為「一維陣列」(One-Dimensional Array),其維度為1。就如上節所述有如一列火車的車廂,欲存取陣列內的內容,只要指定註標便可以將資料輸入到陣列裡面,或將陣列內的資料取出。但是在某些情形,需要使用兩個註標的陣列來表示時,我們將此種陣列稱為「二維陣列」(Two-Di mensional Array),其維度為2。 • 若陣列的維度是二維以上我們就稱為「多維陣列」(Multi-Dimensional Array)。
另外LBound函式可以取得該維度的最低註標值,由於VBScript的任何陣列都是由0開始,因此由LBound函式取得的結果都是0。LBound函式的語法與UBound函式相同,例如:另外LBound函式可以取得該維度的最低註標值,由於VBScript的任何陣列都是由0開始,因此由LBound函式取得的結果都是0。LBound函式的語法與UBound函式相同,例如: • LBound(myArray ,1)LBound(myArray,2)的結果都是0。
10.4 陣列的排序與搜尋 • 由於陣列可以幫我們處理較多筆的資料,而在這麼多的陣列資料中,如果要找到某一個陣列元素,那就需要有搜尋的功能。而在一大堆資料中要搜尋一筆資料,通常會先將這些資料按照某一個基準來排序過,排序和搜尋,也是使用陣列時常會用到的功能。
10.4.2 循序搜尋法 • 排序除了是要在陣列中排出大小順序以外,另一個主要的目的是更有效的搜尋資料,搜尋的方法有很多種,循序搜尋法是最簡單的搜尋方法。它的做法是由第一筆資料一一往下找,一直到找到所要的資料為止,或是搜尋完全部資料為止。此種搜尋,資料可以不必事先經過排序。 • 若總共有N筆資料,則平均要執行N/2次的比較。此方法常用於少量資料的搜尋,或未經排序的資料的搜尋。
10.4.3 二分搜尋法 • 使用二分搜尋法來尋找陣列中的資料,該陣列必須先排序好才行。二分搜尋法的執行效率比循序搜尋法還要好,它平均會做Log2N+1次的比較。其演算法如下: