Chapter 16 集合
20 ArrayList StringCollection 16 本章學習目標 : ArrayList ArrayList Array StringCollection 16-1 21 10-3-8 System.Array Clear Clear 16-1 Clear System.Array Microsoft System.Collection IList 542
20 Visual Basic 2008 最佳實務講座.NET Framework Insert Index key 使用索引值 index 16-1 16-2 21.NET Framework System.Collections.IList 屬性 / 方法 說明 Add Insert Remove RemoveAt Contains Boolean 543
20 IndexOf Clear 屬性 / 方法 說明 Integer -1 IList 16 System.Array ArrayList StringCollection IList 使用索引鍵 值的集合 Key Value 21 16-3.NET Framework System.Collections. IDictionary Key/Valye Key/Value Dictionary 方法與屬性 Add Clear Contains Remove IsFixedSize IsReadOnly 說明 Dictionary key/value Dictionary Dictionary key true Dictionary Dictionary Dictionary 544
20 Visual Basic 2008 最佳實務講座 方法與屬性 Keys Values Item 說明 Dictionary key Dictionary value key value HashTable HyberDictionary SortedList IDictionary 循序存取 Queue Stack 16-2 16-2.NET ArrayList StringCollection ArraryList Object StringCollection String 16-2-1 使用 ArrayList 21 ArrayList System.Collection 範例 16-1: 使用 Add 方法 ArrayList New 545
20 Dim memberlist As New ArrayList 16 ArrayList Add ArrayList ArrayList Add Object ArrayList memberlist.add(3) memberlist.add("coco") memberlist.add(date.now) DisplayList(" memberlist:", memberlist) 16-4 21 16-4 範例 16-2: 使用 Insert 方法 Insert Dim student1 As Student student1.id = 1 student1.firstname = " " student1.lastname = " " memberlist.insert(1, student1) DisplayList(" memberlist:", memberlist) 546
20 Visual Basic 2008 最佳實務講座 student1 1 16-1 16-2 memberlist 16-2 範例 16-3: 使用 Remove 方法 16-5 Remove memberlist memberlist.remove("coco") DisplayList(" memberlist:", memberlist) 16-1 16-2 16-3 CoCo 16-6 21 16-6 547
20 CoCo memberlist memberlist 16 21 範例 16-4: 使用 Container 方法 Container Dim removeitem As String removeitem = "CoCo" If memberlist.contains(removeitem) Then memberlist.remove("coco") DisplayList(" memberlist:", memberlist) Else DisplayList(removeItem & ". memberlist:", memberlist) End If Container CoCo memberlist 16-7 16-7 548
20 Visual Basic 2008 最佳實務講座 範例 16-5: 利用建構函式指定 ArrayList 的初始容量 ArrayList 16-1 ArrayList 0 Capacity Add Insert ArrayList ArrayList Add Insert Dim memberlist As New ArrayList(10) memberlist 10 Capacity 16-2 OutputTextBox.Text = "ArrayList :" & memberlist.capacity & vbcrlf Count Count OutputTextBox.Text &= "ArrayList :" & _ memberlist.count & vbcrlf TrimToSize 21 memberlist.trimtosize() OutputTextBox.Text &= " TrimToSize..." & vbcrlf OutputTextBox.Text &= "ArrayList :" & memberlist.capacity & vbcrlf TrimToSize Capacity Count 549
20 16 16-8 16-2-2 ArrayList 與 Array 差異 ArrayList Array 差異性 ArrayList Array 21 Redim Remove Insert ArrayList Array Array ArrayList ArrayList Array 範例 16-6:ArrayList 與 Array 16-5 ArrayList 550
20 Visual Basic 2008 最佳實務講座 Sub DisplayList(ByVal description As String, ByVal list As ArrayList) OutputTextBox.Text = description & vbcrlf For Each item As Object In list OutputTextBox.Text &= item.tostring() & vbcrlf Next End Sub namelist Dim namelist() As String = {"Anita", "CoCo", "Lisa"} DisplayArray(" namelist:", namelist) 16-2 Sub DisplayArray(ByVal description As String, ByVal list As Array) OutputTextBox.Text = description & vbcrlf For Each item As String In list OutputTextBox.Text &= item & vbcrlf Next End Sub 21 16-2-3 使用 StringCollection StringCollection String String System.Collections.Specialized StringCollection ArrayList StringCollection ArrayList ArrayList Object 551
範例 16-7: 使用 StringCollection StringCollection 16 21 20 Imports System.Collections.Specialized New Dim memberlist As New StringCollection ArrayList Add Insert Remove memberlist.add("coco") memberlist.add("john") memberlist.add("vivid") DisplayStringCol("memberList :", memberlist) memberlist String S u b D i s p l a y S t r i n g C o l(b y V a l d e s c r i p t i o n A s S t r i n g, B y V a l l i s t A s StringCollection) OutputTextBox.Text = description & vbcrlf For Each item As String In list OutputTextBox.Text &= item & vbcrlf Next End Sub 16-9 16-9 552
20 Visual Basic 2008 最佳實務講座 16-3.NET Framework Hashtable ListDictionary HybridDictionary SortedList NameValueCollection Hashtable Hashtable Hashtable 10 ListDictionary HybridDictionary 10 ListDictonary Hashtable Key SortedList SortedList Key SortedList NameValueCollection Key/Value String Key 16-3-1 使用 Dictionary Hashtable ListDictionary SortedList HybridDictionary 16-3 21 範例 16-8: 加入項目到 HybridDictionary HybridDictionary Imports System.Collections.Specialized HybridDictionary Dim dict As New HybridDictionary() 553
20 Add key value Object dict.add("mary", "Mary@email.com") 16 範例 16-9: 列舉 HybridDictionary 項目內容 For Each DictionaryEntry DictionaryEntry Key Vaule Object Key Value For Each entry As DictionaryEntry In dict OutputTextBox.Text &= entry.key & vbtab & entry.value & vbcrlf Next 範例 16-10: 移除 HybridDictionary 中的項目 Remove Key 21 dict.remove("lisa") 範例 16-11: 查詢 HybridDictionary 中的項目 Contains Key Key True False If dict.contains("lisa") Then OutputTextBox.Text = "Key Lisa:" & dict("lisa") Else OutputTextBox.Text = "Key Lisa " End If 16-3-2 使用 NameValueCollection NameValueCollection System.Collections.Specialized Key/Value String Key Vaule 554
20 Visual Basic 2008 最佳實務講座 16-3 16-10 NameValueCollection 範例 16-12: 加入項目到 NameValueCollection NameValueCollection Imports System.Collections.Specialized NameValueCollection Dim nv As New NameValueCollection Add Key Value String nv.add("products", "Visual Studio 2008") nv.add("books", "Visual Basic 2008 ") nv.add("books", "C# 2008 ") nv.add("books", "ASP.NET 3.5 ") nv.add("books", "ADO.NET 3.5 ") nv.add("authors", "Anita") nv.add("authors", "John") nv.add("authors", "Sophie") nv.add("authors", "Vivid") 21 範例 16-13: 列舉 NameValueCollection 項目內容 NameValueCollection AllKeys Key GetValues Key Key 555
20 16 For Each key As String In nvcol.allkeys Dim valuelist As String() = nvcol.getvalues(key) OutputTextBox.Text &= key + ":" + vbcrlf For Each value As String In valuelist OutputTextBox.Text &= vbtab + value + vbcrlf Next Next 16-12 21 16-11 NameValueCollection 範例 16-14: 移除 NameValueCollection 中的項目 Remove Key nv.remove("autohrs") 範例 16-: 查詢 NameValueCollection 中的項目 GetValues Key Key Dim books() As String = nv.getvalues("books") OutputTextBox.Text = " Books Value" + vbcrlf If books Is Nothing Then OutputTextBox.Text = " Books Value" Else 556
20 Visual Basic 2008 最佳實務講座 For Each book As String In books OutputTextBox.Text &= book + vbcrlf Next End If 16-4.NET Queue Stack 16-4-1 使用 Queue Queue First In First Out FIFO 16-4 Queue 屬性 / 方法說明 Enqueue Dequeue InvalidOperationException Dequeue Count Try Catch 21 Clear Peek Count InvalidOperationException Enqueue 16-12 Peek Peek Dequeue Peek Dequeue 557
16 20 21 16-12 Queue 範例 16-16: 加入項目到佇列 Queue System.Collection Visual Basic Queue Dim q As New Queue Enqueue q.enqueue("job:" + DateTime.Now.Ticks.ToString()) 範例 16-: 檢視佇列的第一個項目 Count Peek If q.count > 0 Then first = index - q.count + 1 OutputTextbox.Text &= _ String.Format(" : No.{0} -- {1}", _ first, q.peek) & vbcrlf Else OutputTextbox.Text &= "!!" & vbcrlf End If 558
20 Visual Basic 2008 最佳實務講座 範例 16-: 讀取並移除佇列的第一個項目 Count Dequeue If q.count > 0 Then first = index - q.count + 1 OutputTextbox.Text &= String.Format("No.{0} -- {1}", _ first, q.dequeue) & vbcrlf Else OutputTextbox.Text &= "!!" & vbcrlf End If 16-4 21 16-13 16-4-2 使用 Stack Stack Last In First Out LIFO Stack 559
20 屬性 / 方法 說明 16 Push Pop Peek InvalidOperationException Push 16-14 Peek Peek Pop Pop 21 16-14 Stack 範例 16-: 加入項目到堆疊 Stack System.Collection Visual Basic Stack Dim s As New Stack Push s.push("job:" & Now.Ticks.ToString()) 560
20 Visual Basic 2008 最佳實務講座 範例 16-20: 檢視堆疊中的項目 Count Peek If s.count > 0 Then OutputTextbox.Text &= _ String.Format(" No.{0} -- {1}", index, s.peek()) & vbcrlf Else OutputTextbox.Text &= "!!" & vbcrlf End If 範例 16-21: 讀取並移除堆疊中的項目 Count Pop If s.count > 0 Then OutputTextbox.Text &= String.Format("No.{0} -- {1}", _ index, s.pop()) & vbcrlf index -= 1 Else OutputTextbox.Text &= "!!" & vbcrlf End If 16-4 21 16-561
20 16-5 16 Controls 12-3 ListBox ComboBox Items 16-5-1 表單的 Controls 屬性 Controls Controls 範例 16-22: 檢查欄位是否都有輸入 21 For Each Me.Controls Dim errormsg As String = "" For Each ctl As Control In Me.Controls If TypeOf ctl Is TextBox Then If String.IsNullOrEmpty(ctl.Text.Trim) Then errormsg &= String.Format("[{0}] ", ctl.tag) & vbcrlf End If End If Next MessageBox.Show(errorMsg, " ", MessageBoxButtons.OK, _ MessageBoxIcon.Warning) 562
20 Visual Basic 2008 最佳實務講座 If TypeOf Is Then ctl TextBox TextBox String IsNullOrEmpty 16-8 16-5 16-16 16-5-2 清單控制項的 Items 屬性 ListBox ComboBox CheckedListBox Items Add Insert Remove Count 21 ListBox 的多選功能 ListBox SelectionMode None One MultiSimple MultiExteded MultiSimple MultiExtended ListBox SelectedItems SelectedIndeies 563
20 CheckedListBox 的核取功能 16 CheckedListBox CheckOnClick True CheckedItems CheckedIndices Practice 16-1 使用 ListBox 與 CheckedListBox > >> < << 21 16- 步驟 1: 開啟專案 \Labs_Starter\mod16\Ex16-01 Ex16-01.sln 步驟 2: 執行應用程式 F5 > >> 564
20 Visual Basic 2008 最佳實務講座 1. 2. 3. 步驟 3: 設定控制項的屬性 1. CheckedListBox CheckOnClick True 2. ListBox SelectionMode MultiExtended 步驟 4: 加入 < 按鈕的功能 < Click Add Remove Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System. EventArgs) Handles Button2.Click Dim item As Object = ListBox1.SelectedItem CheckedListBox1.Items.Add(item) ListBox1.Items.Remove(item) End Sub 步驟 5: 加入 << 按鈕的功能 16-5 21 Button4 Click << Insert Remove 565
20 16 21 Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System. EventArgs) Handles Button4.Click Dim lastindex As Integer = CheckedListBox1.Items.Count Dim index As Integer For index = ListBox1.SelectedItems.Count - 1 To 0 Step -1 Dim item As Object = ListBox1.SelectedItems(index) CheckedListBox1.Items.Insert(lastIndex, item) ListBox1.Items.Remove(item) Next End Sub CheckedListBox1.Items.Count ListBox1.SelectedItems.Count For Next ListBox1 步驟 6: 執行與測試 1. F 5 > >> 16-1 566
20 Visual Basic 2008 最佳實務講座 2. < << 16-5 16-2 ArrayList StringCollection Key/Value HashTable ListDictionary HybridDictionary Key/Value NameValueCollection Key/Value 21 567
20 16 21 1. A. Array Add Remove B. ArrayList Add Remove C. StringCollection Add Remove D. 2. String A. Array B. Collection C. ArrayList D. StringCollection 3. String A. Array B. Collection C. ArrayList D. StringCollection 4. A. For Each Next Controls B. Text C. TextBox If TypeOf Is Then D. For Each Next TextBoxes 568
20 Visual Basic 2008 最佳實務講座 5. A. ListBox SelectedItems B. ListBox CheckedItems C. CheckedListBox SelectedItems D. CheckedListBox CheckedItems 6. A. StringCollection B. HashTable C. SortedTable D. Queue 7. String Dim index As Short ' mydata(index) A. StringCollection B. HashTable C. SortedTable D. Queue 8. Queue A. Pop B. Push C. Enqueue D. Dequeue E. Remove 16-5 21 569
NOTE