1. 程式人生 > 實用技巧 >C# ArrayList方法 Add AddRange BinarySearch Clear Contains CopyTo

C# ArrayList方法 Add AddRange BinarySearch Clear Contains CopyTo

CopyTo講了三種方法

所以篇幅可能會比較長

  1         static void Main(string[] args)
  2         {
  3             //ArrayList方法
  4 
  5             //Add
  6             //將物件新增到ArrayList的結尾處
  7             int i, j, k;
  8             ArrayList a = new ArrayList() { "", "" };
  9             //給a新增物件
 10             a.Add("
"); 11 a.Add(""); 12 /* 13 foreach (int i in a ) 14 Console.WriteLine("{0}", i ); 15 這裡報錯了 16 因為foreach不能對ArrayList集合進行操作 17 */ 18 19 for (i = 0; i < a.Count; i++) 20 { 21 Console.WriteLine("
{0}", a[i]); 22 } 23 //輸出結果表明,Add方法是直接將物件加到ArrayList的後面。 24 25 Console.WriteLine("/////////////////////////////////"); 26 27 ArrayList b = new ArrayList() { }; 28 b.Add(""); 29 b.Add(""); 30 for (i = 0; i < b.Count; i++) 31 {
32 Console.WriteLine("{0}", b[i]); 33 } 34 //這裡我們也可以看出來,Add方法也可以直接對空的ArrayList新增值 35 Console.WriteLine("/////////////////////////////////"); 36 37 //ArrayList.AddRage 38 //將一個元素新增到ArrayList末尾,即一個集合 39 a.AddRange(b); 40 for (i = 0; i < a.Count; i++) 41 { 42 Console.WriteLine("{0}", a[i]); 43 } 44 //從這裡就看出來了,b已經被新增在了a的末尾了 45 46 47 //Array.BinarySearch//二元檢索法 48 //在已經排序的ArrayList中檢索對應元素。 49 Console.WriteLine("/////////////////////////////////"); 50 51 a.Sort();//我們現在對a進行排序 52 Console.WriteLine("{0}", a.BinarySearch(""));//4 53 //返還的是一個正數,說明排序成功,BinarySearch也沒有返還一個錯誤的值 54 //那字串是怎麼排序的呢》 55 //我們全部輸出來看一下 56 Console.WriteLine("/////////////////////////////////"); 57 for (i = 0; i < a.Count; i++) 58 { 59 Console.WriteLine("{0}", a[i]); 60 } 61 //結果是:逼逼傻傻是我 62 63 a.Reverse();//補充方法,Sort是正序排列,而Reverse則是反序排列 64 Console.WriteLine("/////////////////////////////////"); 65 for (i = 0; i < a.Count; i++) 66 { 67 Console.WriteLine("{0}", a[i]); 68 } 69 70 //ArrayList.Clear 71 //清除集合內的所有元素 72 b.Clear(); 73 Console.WriteLine("/////////////////////////////////"); 74 for (i = 0; i < b.Count; i++) 75 { 76 Console.WriteLine("{0}", b[i]); 77 } 78 //因為b中的所有元素已經被清除了,所以就沒有了內容,b.Count==0,for迴圈直接啟動 79 80 //ArrayList.Contains 81 //檢查某個元素是否在集合內,這裡返還的是Boolen值 82 b.Contains(1); 83 Console.WriteLine("/////////////////////////////////"); 84 Console.WriteLine("b中有1嗎?{0}", b.Contains(1));//False 85 Console.WriteLine("a中有逼嗎?{0}", a.Contains(""));//True 86 87 //ArrayList.CopyTo 88 //複製某個集合的部分到某個集合裡面 89 //格式 90 //ArrayList.CopyTo(Array1); 91 //ArrayList.CopyTo(Array1,5); 92 //ArrayList.CopyTo(0,Array1,0,5); 93 //我們先來用第一種 94 ArrayList c = new ArrayList() { 'a', 'b', 'c' }; 95 ArrayList cc = new ArrayList() { 'D', 'S', 'B' }; 96 char[] ccc = new char[] { '1','2','3' }; 97 98 c.CopyTo(ccc); 99 100 Console.WriteLine("/////////////////////////////////"); 101 for (i = 0; i <= ccc.GetUpperBound(0) ; i++) 102 { 103 Console.WriteLine("{0}", ccc[i]); 104 } 105 //這裡從結果可以看出來了 106 //這裡有幾個小問題 107 /* 108 1.ArrayList.CopyTo(Array1),顯然這是ArrayList的方法,但是括號內卻不能是ArrayList 109 比如這麼寫的話c.CopyTo(cc);,CopyTo都不會被識別成一個方法,因為他裡面是Array類而不是ArrayList類 110 2.Array類是抽象類,是陣列類的父類,而作為子類的陣列繼承了Array的所有方法,所以不能直接定義Array類 111 比如Array ccc=new Array(){}; 112 Array ccc =new char[] {'a'}; 113 都是錯誤的 114 3.在做for迴圈的時候,i的自加判斷的時候,用Array.GetUpperBound()方法的時候輸出的是最後一個元素的位 115 因為計數是從0開始的,所以會少迴圈一位,所以一般寫作i<Array1=GetUpperBound 116 但是在用ArrayList.Count的時候,這不是一個方法,而是ArrayList的屬性,他輸出的是ArrayList表示的長度 117 所以不會少迴圈,一般寫作i<ArrayList.Count 118 */ 119 120 //第二種用法 121 c = new ArrayList() { 'a', 'b', 'c' }; 122 cc = new ArrayList() { 'D', 'S', 'B' }; 123 ccc = new char[] { '1', '2', '3' }; 124 125 // cc.CopyTo(ccc, 2); 126 //如果直接這麼寫,是一定會報錯的 127 //格式中ArrayList.CopyTo(Array1,Int32);Int32表示的是從Array1第Int32位的元素開始執行Copy 128 //但是前提條件是Array1的空間足夠,空間不足就會報錯 129 //所以如果從第一個開始,就不會超過界限 130 131 cc.CopyTo(ccc,0); 132 Console.WriteLine("//////////////////////////////"); 133 for (i = 0; i <= ccc.GetUpperBound(0); i++) 134 { 135 Console.WriteLine("{0}",ccc[i]); 136 } 137 //這樣就可以直接輸出了 138 //一般來講都會為後面留出空間 139 //比如說。 140 141 char[] cccc = new char[10]; 142 //cccc = new char[] { ',' }; 143 //這樣的操作也是錯誤的,這樣會導致,原先開的10的空間現在變成了1,所以這裡要標明維位數來賦值 144 cccc[0] ='S'; 145 cccc[1] = 'B'; 146 cccc[7] = 'D'; 147 cccc[8] = 'X'; 148 149 Console.WriteLine("//////////////////////////////"); 150 for (i = 0; i <= cccc.GetUpperBound(0); i++) 151 { 152 Console.WriteLine("{0}", cccc[i]); 153 } 154 //從這裡我們看出來了,輸出結果我們沒有用位數來賦值的地方,系統預設給了空,空間得以保留 155 //那當我們執行就不會有問題了 156 cc.CopyTo(cccc, 2); 157 Console.WriteLine("//////////////////////////////"); 158 for (i = 0; i <= cccc.GetUpperBound(0); i++) 159 { 160 Console.WriteLine("{0}", cccc[i]); 161 } 162 //而這裡的複製貼上不同於Struck的從前到後直接取代,而是隻取代部分的內容。 163 164 //我們再來介紹最後一種方法 165 //ArrayList.CopyTo(Int32_0,Array1,Int32_1,Int32_2); 166 //Int32_0表示的是從源ArrayList中從0開始的索引的位數,說白了就是從第幾位開始 167 //Int32_1表示的是從目標Array1中從0開始的索引位數,說白了也是從第幾位開始 168 //Int32_2還是一樣,表示複製多少位數 169 170 //我們來實際操作一下 171 char[] d = new char[15]; 172 d[0] = 'W'; 173 d[1] = 'S'; 174 d[2] = ''; 175 d[3] = ''; 176 d[7] = 'S'; 177 d[8] = 'B'; 178 179 cc.CopyTo(0, d, 2, 2); 180 Console.WriteLine("//////////////////////////////"); 181 for (i = 0; i <= d.GetUpperBound(0); i++) 182 { 183 Console.WriteLine("{0}", d[i]); 184 } 185 //這裡我們設定了cc的起始位數,從第0位開始,也就是從頭開始,然後對d設定的位數是從2開始, 186 //而我們只取了cc的兩位,所以只複製了兩個出來,其他均未改變。 187 188 }