Download presentation
1
第8章 字串與陣列 8-1一維陣列的處理 8-2 字串處理 8-3 多維陣列的處理 8-4 動態陣列與參數傳遞 8-5 陣列排序與搜尋
2
8-1 一維陣列的處理 8-1-1 陣列的基礎 8-1-2 宣告一維陣列 8-1-3 For Each迴圈走訪陣列元素與邊界函數
3
8-1-1 陣列的基礎-說明 「陣列」(Arrays)是一種程式語言的基本資料結構,屬於一種循序性的資料結構。日常生活最常見的範例是一排信箱,如下圖所示:
4
8-1-1 陣列的基礎-VB陣列 Visual Basic語言的陣列屬於參考資料型態,它可以將相同資料型態的變數集合起來,使用一個名稱代表,以索引值存取元素,每一個元素相當於是一個變數,如下圖所示:
5
8-1-2 宣告一維陣列-語法 Visual Basic陣列同樣使用【Dim】關鍵字來宣告,我們可以在宣告同時指定陣列尺寸。一維陣列的宣告語法,如下所示: Dim 陣列名稱(最大索引) As 資料型態 或 Dim 陣列名稱(0 To 最大索引) As 資料型態 陣列元素個數為括號的最大索引數加一,也可以使用To關鍵字指出範圍。
6
8-1-2 宣告一維陣列-範例 例如:宣告一維陣列來儲存學生姓名和成績,如下所示:
Dim arrScore(4) As Integer Dim arrName(4) As String 上述程式碼宣告2個一維陣列,一為整數陣列;一是字串陣列,括號值是陣列最大的索引值。索引值是從0開始,以整數陣列來說是0~4共有5個元素。
7
8-1-2 宣告一維陣列-陣列值 我們也可以在宣告陣列時,不指定陣列最大索引值,而直接指定陣列元素的初值,如下所示:
Dim arrScore() As Integer = {60, 89, 75, 68, 90} 另一種方法是使用指定敘述來指定陣列值,如下所示: arrScore(0) = 60 arrScore(1) = 89 arrScore(2) = 75 arrScore(3) = 68 arrScore(4) = 90
8
8-1-2 宣告一維陣列-取出陣列值 同樣方式,我們可以使用索引值來取出陣列元素值,如下所示:
Dim score As Integer score = arrScore(3) 上述程式碼取得陣列索引3的值,因為索引值從0開始,也就是陣列的第4個元素值68。
9
8-1-3 For Each迴圈走訪陣列元素與邊界函數-走訪陣列(語法)
For Each 變數 In 陣列 程式區塊 Next 上述「變數」可以取得陣列的一個元素,變數需要和陣列屬於相同資料型態,迴圈自動從索引0開始,每執行一次迴圈取得一個元素值並且自動移至下一個元素,直到沒有元素為止。
10
8-1-3 For Each迴圈走訪陣列元素與邊界函數-走訪陣列(範例)
例如:計算上一節arrScore陣列元素的總和,如下所示: For Each element In arrScore total += element Next 上述程式碼的變數element是陣列元素,每執行一次,就將陣列元素值加到total,最後變數total是陣列元素的總和。
11
8-1-3 For Each迴圈走訪陣列元素與邊界函數-陣列邊界函數
如果使用For/Next迴圈(Do/Loop迴圈也可以)來存取陣列元素,我們可以搭配Visual Basic函數來取得陣列邊界,傳入參數是陣列變數,如下表所示:
12
8-2 字串處理 8-2-1 字串的基礎 8-2-2 字串長度與大小寫轉換 8-2-3 取出子字串與字串反轉 8-2-4 子字串的搜尋與取代
13
8-2-1 字串的基礎-說明 Visual Basic字串是String資料型態的變數或字串值,字串是0或多個依序的Char資料型態的字元,以雙引號括起的文字內容,如下所示: Dim str As String = _ "Visual Basic 2005程式設計範例教本" Dim str1 As String str1 = "ASP.NET 2.0網頁製作徹底研究"
14
8-2-1 字串的基礎-新字串值 不過Visual Basic字串內容並不能更改,也就是說,一旦建立字串後,就無法改變其值,只能重新指定成新的字串值或另一個字串變數,如下圖所示:
15
8-2-2 字串長度與大小寫轉換 Visual Basic函數可以取得字串長度、進行英文字母大小寫轉換和刪除頭尾的空白字元,如下表所示:
16
8-2-3 取出子字串與字串反轉 Visual Basic提供Mid()、Left()和Right()等函數,可以從字串中取出所需的子字串,或是反轉字串,如下所示:
17
8-2-4 子字串的搜尋與取代-搜尋 在多行文字方塊如果輸入一整篇文章,我們可以使用Visual Basic函數來搜尋字串,和自行建立函數來取代子字串。Visual Basic字串搜尋函數,如下表所示:
18
8-2-4 子字串的搜尋與取代-取代 Visual Basic並沒有字串取代函數,我們可以自行使用Mid()、Left()和Right()函數來建立字串取代功能,如下所示: out = txtInput.Text strLeft = Mid(out, 1, pos) strRight = Mid(out, pos + length + 1) txtInput.Text = strLeft & txtReplace.Text & strRight 上述程式碼從字串out使用Mid()函數取出位在子字串左邊的strLeft字串和右邊的strRight字串,然後在中間加上取代字串,就完成字串取代功能。
19
8-3 多維陣列的處理-說明 「二維陣列」(Two-dimensional Array)或多維陣列都是一維陣列的擴充。如果將一維陣列想像成一度空間的線,二維陣列就是二度空間的平面,三維陣列即空間。 在日常生活中的二維陣列應用非常廣泛,只要是平面的表格,都可以轉換成二維陣列來表示。例如:月曆、功課表和成績單等。例如:在Visual Basic宣告學生成績的二維陣列,如下所示: Dim Scores(,) As Integer = _ { { 54, 68, 93 }, { 67, 78 , 89} }
20
8-3 多維陣列的處理-圖例 二維陣列擁有2個索引,左索引(Left Index)指出元素位在哪一列,右索引(Right Index)指出位在哪一欄,使用2個索引值就可以存取指定的二維陣列元素。
21
8-3 多維陣列的處理-指定元素值 二維陣列如果沒有指定陣列初值,我們需要在宣告時指定陣列尺寸,如下所示: 上述程式碼設定二維陣列的元素值。
Dim Scores(1, 2) As Integer Scores(0,0)=54 Scores(0,1)=68 Scores(0,2)=93 Scores(1,0)=67 Scores(1,1)=78 Scores(1,2)=89 上述程式碼設定二維陣列的元素值。
22
8-3 多維陣列的處理-走訪元素 在設定陣列值後,存取二維陣列需要使用二層巢狀迴圈,如下所示: For i = 0 To 1
For j = 0 To 2 Sums(i) += Scores(i, j) Next j Next i
23
8-4 動態陣列與參數傳遞 8-4-1 動態陣列 8-4-2 傳遞字串與陣列參數
24
8-4-1 動態陣列-宣告 Visual Basic陣列可以使用【ReDim】關鍵字在程式執行時,重新調整其尺寸。不過ReDim不能宣告陣列,只能更改已經宣告的陣列尺寸,如下所示: Dim arrScore(4) As Integer ……… ReDim arrScore(6) 上述程式碼將原來arrScore陣列大小從5改為7個元素。因為Visual Basic陣列在變更陣列尺寸後可能遺失陣列資料。
25
8-4-1 動態陣列-保留陣列內容 如果陣列已經擁有內容,請使用Preserve關鍵字來保留原陣列的內容,如下所示:
ReDim Preserve arrScore(6) 上述程式碼可以放大陣列尺寸,當然放大陣列尺寸並不會有問題,如果縮小陣列的話,陣列裁剪部分的資料還是會遺失。
26
8-4-1 動態陣列-二維動態陣列 對於是二維以上的多維陣列,我們可以變更指定維度的尺寸,如果使用Preserve關鍵字,就只能變更最後1個維度的尺寸,如下所示: Dim arrTable(10, 20) ………. ReDim Preserve arrTable(10, 30)
27
8-4-2 傳遞字串與陣列參數-說明 程序與函數的參數如果是字串或陣列,因為字串與陣列都是參考資料型態,此時ByVal和ByRef參數傳遞的差異,如下表所示:
28
8-4-2 傳遞字串與陣列參數-範例 例如:在程序與函數中,使用指定敘述將參數指定成其他陣列,如下所示:
Sub Replace(ByVal A() As Integer) Dim B() As Integer = {10, 20, 30} A = B …………. End Sub 上述程序將參數的陣列A指定成新陣列B,事實上,並不會影響原參數陣列A,因為傳值方式不能指定成新陣列。
29
8-5 陣列排序與搜尋 8-5-1 陣列的排序 8-5-2 陣列的搜尋
30
8-5-1 陣列的排序-基礎 排序工作是將一些資料依照特定原則排列成遞增或遞減的順序。例如:整數陣列Data的內容,如下所示:
Data(0)=89 Date(1)=34 Date(2)=78 Date(3)=45 上述陣列以整數值的大小,將陣列內容依遞增的順序來排序。其排序結果如下所示: Data(0)=34 Date(1)=45 Date(2)=78 Date(3)=89 上述陣列Data已經完成排序,其大小順序如下所示: Data(0) < Data(1) < Data(2) < Data(3)
31
8-5-1 陣列的排序-泡沫排序法(說明) 泡沫排序法(Bubble Sort)是使用交換方式來進行排序,可以將較小元素逐漸移動至陣列開始,較大元素慢慢浮向陣列的最後,如同水缸中的泡沫,慢慢往上浮,故稱為泡沫排序法。
32
8-5-1 陣列的排序-泡沫排序法(過程) 泡沫排序法的過程是使用交換方法,在陣列中找尋最大值,例如:原始陣列內容,如下所示:
Data(0)=89 Date(1)=34 Date(2)=78 Date(3)=45 陣列依序比較陣列元素0和1,元素1和2,元素2和3來交換陣列元素,如下所示: Data(0)=89 > Date(1)=34 => Data(0)=34 Date(1)=89 交換 Data(1)=89 > Date(2)=78 => Data(1)=78 Date(2)=89 交換 Data(2)=89 > Date(3)=45 => Data(2)=45 Date(3)=89 交換 陣列最大值89一步步往陣列尾端移動。接著重複上述步驟,每次縮小1個元素後,再重新比較陣列元素,就可以完成陣列元素的排序。
33
8-5-2 陣列的搜尋-基礎 搜尋是在資料中找出是否存在與鍵值相同的資料,如果資料存在,就進行後續的資料處理。例如:查尋電話簿是為了找朋友的電話號碼,然後與他連絡。在書局找書也是為了找到後買回家閱讀。 搜尋方法依照搜尋的資料分為兩種,如下所示: 沒有排序的資料:針對沒有排序的資料執行搜尋,我們需要從資料的第1個元素開始比較,從頭到尾以確認資料是否存在。 已經排序的資料:因為資料已經排序,所以搜尋就不需從頭開始一一比較。例如:在電話簿找電話,相信沒有人是從電話簿的第1頁開始找,而是直接從姓名出現的頁數開始找,因為電話簿已經依照姓名進行排序。
34
8-5-2 陣列的搜尋-線性搜尋法 線性搜尋法(Sequential Search)是從陣列的第1個元素開始走訪整個陣列,然後一個一個比較是否擁有搜尋的鍵值,因為需要走訪整個陣列,所以陣列資料是否排序都無所謂。 換句話說,在Visual Basic程式可以使用迴圈來走訪陣列,以便比較陣列是否有指定的鍵值。
35
8-5-2 陣列的搜尋-二元搜尋法 二元搜尋法(Binary Search)是一種分割資料的搜尋方法,搜尋資料是已經排序的資料。二元搜尋法先檢查排序資料的中間元素,如果等於鍵值就是找到;如果小於鍵值,表示資料在前半段;否則在後半段。然後繼續分割半段資料來重覆上述操作,直到找到或已經沒有資料可以分割為止。 例如:Data陣列索引的上下範圍分別是low和high,中間元素mid是(low + high)\2。在執行二元搜尋時分成三種情況,如下所示: 搜尋鍵值小於陣列的中間元素:鍵值在資料陣列的前半部。 搜尋鍵值大於陣列的中間元素:鍵值在資料陣列的後半部。 搜尋鍵值等於陣列的中間元素:找到搜尋的鍵值。
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.