C 泛型集合之Dictionary使用技巧

2021-07-10 01:25:52 字數 4436 閱讀 3429

1、要使用dictionary集合,需要匯入c#泛型命名空間  

system.collections.generic(程式集:mscorlib)  

2、描述  

1)、從一組鍵(key)到一組值(value)的對映,每乙個新增項都是由乙個值及其相關連的鍵組成  

2)、任何鍵都必須是唯一的  

3)、鍵不能為空引用null

(vb中的nothing),若值為引用型別,則可以為空值  

4)、key和value可以是任何型別(string

,int

,custom 

class

等)  

3、建立及初始化  

dictionary, string

> mydictionary = 

newdictionary<

int, 

string

>();  

4、新增元素  

mydictionary.add("c#"

,0);  

mydictionary.add("c++"

,1);  

mydictionary.add("c"

,2);  

mydictionary.add("vb"

,2);  

5、查詢元素by key  

if(mydictionary.containskey(

"c#"

))  

,value:"

, "c#"

, mydictionary[

"c#"

]);  

}  6.遍歷元素 by keyvaluepair  

foreach

(keyvaluepair<

string

, int

> kvp 

inmydictionary)  

, value = "

,kvp.key, kvp.value);  

}  7、僅遍歷鍵 by keys 屬性  

dictionary, int

>.keycollection keycol = mydictionary.keys;  

foreach

(string

key 

inkeycol

/*string key in mydictionary.keys*/

)  "

, key);  

}  8、僅遍歷值by valus屬性  

dictionary, int

>.valuecollection valuecol = mydictionary.values;  

foreach

(int

value 

invaluecol)  

", value);  

}  9.移除指定的鍵值by remove方法  

mydictionary.remove("c#"

);  

if(mydictionary.containskey(

"c#"

))  

,value:"

, "c#"

, mydictionary[

"c#"

]);  

}  else

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

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

dictionary,telnote> ht=

newdictionary<

string

,telnote>();  

在dictionary宣告中,「,telnote>」中的

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 

infilm)  

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

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

if(!film.containskey(

"段譽"

))  

//獲取鍵的集合

dictionary < string

, string

> .keycollection keys = film.keys;  

//遍歷鍵的集合

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

);  

foreach

(string

str 

inkeys)  

dictionary < string

, string

> .valuecollection values = film.values;  

//遍歷值的集合

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

);  

foreach

(string

strfilm 

invalues)  

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

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

);  

foreach

(string

strname 

infilm.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

關鍵字,否則編譯失敗。

C 集合 泛型集合

非泛型集合的類和介面位於system.collections命名空間。泛型集合的類和介面位於system.collections.generic命名空間。普通集合 arraylist 值 有序不唯一 hashtable key 必須唯一 可為空 不能為null value 可重複 能為空和null ...

C 泛型 泛型集合Dictionary

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

C 泛型集合

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