C#.net技术内幕04-集合
?
Int[]?a=new?int[][]{?????????New?int[]{1,1,1};
??????????New?int[]{23,12};
}
??? 2.Out與ref:將數組作為參數傳遞時,在調用函數之前不需要初始化out參數,但調用的函數必須在返回前分配數組類型。而且,ref參數必須在函數調用之前分配。
??
??? 3. 枚舉數(enumerator):
??? 它是一個對象,可以通過它對集合項進行便利。枚舉數只能讀取但不能改變集合的至。在實例化后,會被放在集合第一個元素之前。如果不調用movenexe就直接使用current訪問的話會出錯。當枚舉數到達集合的末尾時,會停留在集合的最后一個元素后面,并返回假。如果此時繼續使用current也會出錯。
??? 主要方法屬性:
- current返回集合中的當前對象;
- Movenext將枚舉項后移一項;
- Reset將枚舉數移到初始位置。
??? 4.幾種常用的集合:
?? A.Arraylisy:使用add,remove等對元素進行操作。
??
View Code :public?static?void?arraylist1()//arraylist的使用????????{
????????????ArrayList?arr?=?new?ArrayList();
????????????for?(int?i?=?1;?i?<=5;?i++)
????????????????arr.Add(i.ToString());
????????????enumerator(arr);
????????????arr.Remove(arr[6]);
????????????enumerator(arr);
????????}
public?static?void?enumerator()//使用枚舉數遍歷arraylist集合
????????{
????????????ArrayList?arr?=?new?ArrayList();
????????????arr.Add("hello");
????????????arr.Add("world");
????????????arr.Add("peace");
????????????IEnumerator?en?=?arr.GetEnumerator();
????????????while?(en.MoveNext())
????????????????Console.WriteLine(en.Current);
????????????Console.ReadLine();
????????}
?
?? B.Stack:是一種后進先出結構。有push。Pop。peek三種方法。
?
View Code protected?static?void?stack()//stack的使用????????{
????????????Stack?stk?=?new?Stack();
????????????for?(int?i?=?1;?i?<=?5;?i++)
????????????stk.Push(i.ToString());
????????????enumerator(stk?);
????????????stk.Pop();
????????????enumerator(stk?);
????????}
protected?static?void?enumerator(Stack?arr)//使用枚舉數遍歷stack集合
????????{
????????????IEnumerator?en?=?arr.GetEnumerator();
????????????while?(en.MoveNext())
????????????????Console.WriteLine(en.Current);
????????????Console.WriteLine("************");
????????}
?
C.Hashtable:這是一種鍵值對集合。該集合與前面的兩種集合不太一樣,我寫了段簡單代碼試了一下,發現了一下幾點:
首先他得到的并不是原來輸入的順序,而是進行散列后的值;
還有使用枚舉數的時候不再是Ienumerator,而是IdictionaryEnumerator;
最后,在使用枚舉數讀取值的時候不再是en.current,而是en.value。
?
View Code protected?static?void?hashtable()//hashtable的使用????????{
????????????Hashtable?ht?=?new?Hashtable();
????????????for?(int?i?=?1;?i?<=?5;?i++)
????????????????ht.Add(?"num"+i.ToString?(),i.ToString());
????????????enumerator(ht);
????????????ht.Remove("num3");
????????????enumerator(ht);
????????}
????????protected?static?void?enumerator(Hashtable?arr)//使用枚舉數遍歷hashtable集合
????????{
????????????IDictionaryEnumerator?en?=?arr.GetEnumerator();
????????????while?(en.MoveNext())
????????????Console.Write(en.Value?);
????????????Console.WriteLine("************");
????????}
?
D.Bitarray:一組真假值的集合。遍歷的方法與arraylist以及stack相同。
要注意以下幾點:
首先bitarray實例化時必須聲明其長度;
其次,為其添加元素時用的方法是set;
最后,遍歷時使用的枚舉數仍未Ienumerator。
?
View Code protected?static?void?bitarray()//bitarray的使用????????{
????????????BitArray?ba?=?new?BitArray(5);
????????????for?(int?i?=?0;?i?<=?4;?i++)
????????????ba.Set(i,?i?%?2?==?0);
????????????enumerator(ba);
????????}
????????protected?static?void?enumerator(BitArray?arr)//使用枚舉數遍歷bitarray集合
????????{
????????????IEnumerator?en?=?arr.GetEnumerator();
????????????while?(en.MoveNext())
????????????Console.Write(en.Current?);
????????????Console.WriteLine("************");
????????}
???? E.Sortedlist:這種用法和hashtable與arraylist有點像。
首先,添加元素用的是ADD方法,添加的是鍵值對;
其次,遍歷時使用的枚舉數和Hahstable比較像。讀取的時候既可以根據鍵值讀取,也可以根據索引值讀取。
?
View Code ?protected?static?void?sortedlist()????????{
????????????SortedList?sl?=?new?SortedList();
????????????for?(int?i?=?0;?i?<?5;?i++)
????????????????sl.Add("num"?+?i.ToString(),?i.ToString());
????????????enumerator(sl);
????????}
????????protected?static?void?enumerator(SortedList?arr)//使用枚舉數遍歷hashtable集合
????????{
????????????IDictionaryEnumerator?en?=?arr.GetEnumerator();
????????????while?(en.MoveNext())
????????????Console.Write(en.Value);
????????????Console.WriteLine(arr["num2"]);
????????????Console.WriteLine(arr.GetByIndex(2));
????????????Console.WriteLine("************");
????????}
?
???F:queue:這是一種先進先出隊列結構。入隊方法為enqueque ,出隊方法為dequeque。枚舉數遍歷方式使用Ienumerator,
?
View Code protected?static?void?queue()????????{
????????????Queue?q?=?new?Queue();
????????????for?(int?i?=?0;?i?<?5;?i++)
????????????q.Enqueue(i.ToString());
????????????enumerator(q?);
????????????q.Dequeue();
????????????enumerator(q);
????????}
????????protected?static?void?enumerator(Queue?q)//使用枚舉數遍歷queue集合
????????{
????????????IEnumerator?en?=?q.GetEnumerator();
????????????while?(en.MoveNext()){
????????????Console.Write(en.Current);
????????????Console.WriteLine();}
????????}
????
轉載于:https://www.cnblogs.com/janes/archive/2009/03/17/1414679.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的C#.net技术内幕04-集合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分析函数RANK的使用
- 下一篇: bcp in 错误