1. 程式人生 > >【C#】之 集合

【C#】之 集合

#一、ArrayList
  對於普通的陣列,在宣告時需指定其型別,每一種陣列只能對應一種型別,並且陣列順序需按小到大排序。如果想要隨便的在任意一個數組中放各種型別的資料,並且不確定放多少個,這時就用到了ArrayList集合——動態陣列。
##1、宣告方法
  Array List 陣列名 =new ArrayList(); //要先匯入名稱空間 using system.collections.
##2、常用方法

新增資料:

ArrayList.add(資料值);   //不是通過下標新增資料,但利用下標可以重新賦值
ArrayList.addrange(陣列名) ; 可直接新增陣列並顯示出來
ArrayList 陣列名 = new ArrayList(建構函式);//通過建構函式的形式在集合中放一個數組並能直接顯示出來

利用下標重新賦值:ArrayList[0]=資料值;

在某一個下標位置插入一個值:ArrayList.insert(i,i+1);

判斷集合中是否包含這個元素:arraylist.contains(i);

清空:ArrayList.clear();

集合中元素的個數:int num =arraylist.count;

##3、舉例
  若集合中某個元素存的是陣列或者是一個類,可通過迴圈判定顯示。

int[] nums = new int[] { 1, 3, 4, 4, 5 };
ArrayList arraylist = new ArrayList () ; //宣告集合
//在集合中新增資料
arraylist.Add  ("xiaohong");
arraylist.Add(89.256);
arraylist.Add(890);
arraylist.Add(true);
arraylist.Add(3.23m);            
arraylist.Add(nums);//新增一個數組
		
person p = new person("小楊", 19, '男');//新增一個類
arraylist.Add(p);
						
arraylist[5] = 12; //改變下標為5的元素的值
		
//將陣列型別的資料和類顯示出來
for (int i = 0; i < arraylist .Count ; i++)
{
	 if (arraylist [i] is int[]) //判斷ArrayList的第i個元素是否能夠轉化成int型別陣列
	{
		int[] numbers = (int[])arraylist[i]; //定義一個int型別的陣列number,賦值為ArrayList集合中第i個元素強制轉換的結果
		for (int j = 0; j  < numbers .Length ; j++)
		{
		      Console.WriteLine(numbers[j]);
		}
	}
	 else if (arraylist [i ] is  person )  //判斷ArrayList的第i個元素是否能夠轉換成 person這個類
	{
		((person)arraylist[i]).say();
	}
	else
	{
		Console.WriteLine(arraylist[i]);
	}
}
 Console.ReadKey();

#二、List<T>
泛型集合,是為了專門處理某種型別,ArrayList對應的是list<型別名>,在尖括號中寫什麼型別,這個集合就變成了什麼型別的集合。新增資料、插入資料、索引訪問資料都是這個型別的,不用考慮所有的轉化問題。使用時不用匯入名稱空間。

//隨機的往這個list集合中新增十個數字,不能重複,求和,求最大值,最小值平均值
 List<int> list = new List<int>();
Random r = new Random();
int num = 0;
while (list.Count !=10)
{
	num = r.Next(1, 100);
	if (!list.Contains(num)) 
	{
		list.Add(num);
	}
}
Console.WriteLine("最大值為{0}最小值為{1}和為{2}平均值為{3}", list.Max(), list.Min(), list.Sum(), list.Average());
 Console.ReadKey();

#三、字典 dictionary
  儲存資料的另一種形式,與雜湊表很像,存在鍵值對,但在使用時不用匯入名稱空間。

Dictionary<string, string> dic = new Dictionary<string, string>();//使用宣告			            dic.Add("老蘇", "鳳姐");
dic.Add("老牛", "芙蓉");
dic.Add("老馬", "春哥");
dic.Add("老虎", "月月");
foreach (var item in dic.Keys )//遍歷字典
{
	 Console.WriteLine("key----{0},value-----{1}", item, dic[item]);
}
Console.ReadKey();

#四、雜湊表

  也就是我們在資料結構導論中所學的雜湊函式,是根據關鍵碼值(Key value)而直接進行訪問的資料結構。它通過把關鍵碼值對映到表中一個位置來訪問記錄,以加快查詢的速度。

##1、要點

1、以鍵值對的形式存在  key  ——鍵,value——值,鍵值對均是object型別
2、鍵值對中的鍵就是為了找資料用的,必須提供,不允許重複
3、使用鍵作為尋找方式是一種無序的結構
4、轉換使用裡式轉換原則
5、使用前匯入名稱空間using system.collections 
6、儲存的資料不限制什麼型別

##2、foreach迴圈

Hashtable ht = new Hashtable();	            
ht.Add("老蘇", "1001");
ht.Add("小馬", "1002");
ht.Add("小楊", "1003");
ht.Add("1004", "小趙");
ht.Add(new person("小趙",19,'男'),1005);
	
foreach (var str in ht.Keys ) //foreach迴圈可以遍歷整個雜湊表 str為對應的鍵,ht.keys為鍵所對應的值
{
	 Console.WriteLine("key{0},---------value{1}", str, ht[str]);
}
Console.WriteLine("新增成功了");
Console.ReadKey();

#五、幾種集合的區別
這裡寫圖片描述