C 泛型 泛型集合Dictionary

2021-09-08 08:42:26 字數 2255 閱讀 7645

在system.collections.generic命名空間中,與arraylist相對應的泛型集合是list,與hashtable相對應的泛型集合是dictionary,其儲存資料的方式與雜湊表相似,通過鍵/值來儲存元素,並具有泛型的全部特徵,編譯時檢查型別約束,讀取時無須型別轉換。

**本儲存的例子中,使用dictionary來儲存**本資訊,**如下:

dictionaryht=new dictionary();

在dictionary宣告中,「」中的string表示集合中key的型別,telnote表示value的型別,定義dictionary泛型集合中的方法如下:

dictionarystudents=new dictionary();

其中「k」為佔位符,具體定義時用儲存鍵「key」的資料型別代替,「v」也是佔位符,用元素的值「value」的資料型別代替,這樣就在定義該集合時,宣告了儲存元素的鍵和值的資料型別,保證了型別的安全性。

dictionary中元素的操作方法與hashtable相似,新增元素,獲取元素,刪除元素,遍歷集合元素的方法基本相同。

dictionary和hashtable的區別

dictionary和hashtable的相同點:新增元素,刪除元素,通過鍵訪問值的方法相同。

dictionary和hashtable的不同點:

dictionary對新增的元素具有型別約束,hashtable可新增任意型別的元素。

dictionary不需要裝箱、拆箱操作,hashtable新增時裝箱,讀取時拆箱。

在dictionary集合中,除了通過鍵獲取值的方法外,還有一種trygetvalue(key)方法,可以通過鍵獲取值,該方法返回值為布林型,如果存在和鍵相對應的值,則返回true,否則返回false。避免了因獲取不到相應值發生的異常。

using system;

using system.collections.generic;

class program

", film.count);

film.remove("楊過");

//遍歷集合

console.writeline("武俠電影的主角及電影名");

console.writeline("\t主角\t電影");

foreach (keyvaluepair < string, string > kvp in film)

\t", kvp.key, kvp.value);

}//檢查元素是否存在,如不存在,新增

if (!film.containskey("段譽"))

//獲取鍵的集合

dictionary < string, string > .keycollection keys = film.keys;

//遍歷鍵的集合

console.writeline("受歡迎的武俠片中主角名");

foreach (string str in keys)

dictionary < string, string > .valuecollection values = film.values;

//遍歷值的集合

console.writeline("最受歡迎的武俠片");

foreach (string strfilm in values)

//遍歷元素的另一種方法

console.writeline("和雜湊表相同的遍歷元素方法");

foreach (string strname in film.values)

//獲取鍵對應的值

string myfilm = film["令狐沖"];

console.writeline("主角為令狐沖的電影名", myfilm);

//獲取鍵對應值的trygetvalue方法

string objfilm = string.empty;

if (film.trygetvalue("段譽", out objfilm))

", objfilm);

}else

console.writeline("沒有主角為段譽的電影");

console.readkey();}}

**建立了乙個dictionary集合,鍵和值的資料型別是string型別,後邊**的元素新增,刪除都和雜湊表處理方法相同,遍歷元素時不需要進行資料型別強制轉換。dictionary通過鍵取值的trygetvalue方法,此方法包括兩個引數,乙個是要查詢的鍵,另乙個是獲取的值,注意值前面使用out關鍵字。

注意:使用trygetvalue方法時,引數一定要使用out關鍵字,否則編譯失敗。

泛型集合,非泛型集合

arraylist 非泛型集合 list 泛型集合 集合跟陣列比較我們更容易理解。陣列 1,長度固定2,資料型別預先宣告 集合 1,長度可變2,資料型別預先宣告的為泛型集合,資料型別不限定為非泛型 arraylist 長度不固定,元素資料型別為object的集合。object類之間或間接為所有類的父...

C 泛型集合

集合是oop中的乙個重要概念,c 中對集合的全面支援更是該語言的精華之一。為什麼要用泛型集合?在c 2.0之前,主要可以通過兩種方式實現集合 a.使用arraylist 直接將物件放入arraylist,操作直觀,但由於集合中的項是object型別,因此每次使用都必須進行繁瑣的型別轉換。b.使用自定...

C 泛型集合

陣列的侷限性 陣列元素個數是固定的,陣列一但定義,就無法改變元素總數,如果需求變化,就要修改原始碼。如果初始化元素總數非常大,則會造成空間浪費。集合的特點 根據需求動態增加元素個數,沒有限制。list泛型集合的特點 元素可以擺放無序 表示泛型,t是type的縮寫,表示當前不確定具體型別。可以根據使用...