索引器、雜湊表Hashtabl、字典Dictionary
一、索引器
索引器類似於屬性,不同之處在於它們的get訪問器採用參數。要聲明類或結構上的索引器,使用this關鍵字。
樣本:
索引器範例程式碼
/// <summary>
/// 儲存星期幾的類。聲明了一個get訪問器,它接受字串,並返回相應的整數
/// </summary>
public class 星期
{
public string[] weeks = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
//索引器 它接受星期幾的字串,將它作為索引index
public int this[string day]
{
//get訪問器 並返回相應的整數
get
{
int i = 0;
foreach (var item in weeks)
{
if (item == day)
{
return i;
}
i++;
}
//沒找到返回-1
return -1;
}
}
}
二、雜湊表Hashtabl
Hastable是雜湊表的實現,能根據關鍵字取關索引值,這key的類型是object, value的類型也是object。
在雜湊表中添加一個key/value索引值對:HashtableObject.Add(key,value);
在雜湊表中去除某個key/value索引值對:HashtableObject.Remove(key);
從雜湊表中移除所有元素: HashtableObject.Clear();
判斷雜湊表是否包含特定鍵key: HashtableObject.Contains(key);
遍曆Hashtable對象的兩種方法:
由於Hashtable每個元素都是一個鍵/值對,因此元素類型既不是鍵的類型,也不是值的類型,而是DictionaryEntry類型。
Hashtable範例程式碼
//方法一
foreach (System.Collections.DictionaryEntry de in myHashtable)
{
//注意HastTable記憶體儲的預設類型是object,需要進行轉換才可以輸出
Console.WriteLine(de.Key.ToString());
Console.WriteLine(de.Value.ToString());
}
//方法二
System.Collections.IDictionaryEnumerator enumerator = myHashtable.GetEnumerator();
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Key); // Hashtable關健字
Console.WriteLine(enumerator.Value); // Hashtable值
}
三、字典Dictionary
Dictionary<Tkey,Tvalue>是Hastbale的泛型實現。
//遍曆鍵
foreach (string key in myDictionary.Keys)
{
//遍曆某鍵的值
foreach (string val in myDictionary[key])
{
}
}
由於 Dictionary 是鍵和值的集合,因此元素類型並非鍵類型或實值型別。相反,元素類型是鍵類型和實值型別的 KeyValuePair。
字典遍曆樣本
foreach (KeyValuePair<string, string> kvp in myDictionary)
{
string key = kvp.Key;//key包含了字典裡的鍵
for (int i = 0; i < kvp.Value.Count; i++)
{
Response.Write(kvp.Value[i]);
}
}
樣本:
代碼
//定義一個<string,int>的Dictionary,讓它的值進行添加(也可以用Add方法)
Dictionary<string, int> dic = new Dictionary<string, int>();
//添加兩個鍵為"成績1","成績2";並為它們的值賦為0
dic["成績1"] = 0;
dic["成績2"] = 0;
// 把這兩個值分別加1
dic["成績1"]++;
dic["成績2"]++;