Dictionary<(Of <(TKey, TValue>)>) 泛型類別提供從一組索引鍵至一組值的對應。加入字典中的每一個項目都是由值及其關聯索引鍵所組成。使用其索引鍵擷取值的速度非常快 (接近 O(1)),這是因為 Dictionary<(Of <(TKey, TValue>)>) 類別是實作為雜湊資料表。
注意事項: |
|---|
擷取速度取決於為 TKey 指定之型別的雜湊演算法品質。 |
只要物件用做 Dictionary<(Of <(TKey, TValue>)>) 中的索引鍵,就無法以影響其雜湊值 (Hash Value) 的任何方式對其進行變更。Dictionary<(Of <(TKey, TValue>)>) 中的每個索引鍵都必須是唯一的 (根據字典的相等比較子 (Comparer))。索引鍵不能是 nullNothingnullptrNull 參照 (即 Visual Basic 中的 Nothing),但是,如果實值型別 TValue 是參考型別時,值就可以是 Null。
Dictionary<(Of <(TKey, TValue>)>) 需要相等實作,以判斷索引鍵是否相等。藉由使用接受 comparer 參數的建構函式 (Constructor),您可以指定 IEqualityComparer<(Of <(T>)>) 泛型介面的實作。如果您不指定實作,則會使用預設的泛型相等比較子 EqualityComparer<(Of <(T>)>)..::.Default。如果型別 TKey 會實作 System..::.IEquatable<(Of <(T>)>) 泛型介面,則預設相等比較子會使用該實作。
Dictionary<(Of <(TKey, TValue>)>) 的容量是 Dictionary<(Of <(TKey, TValue>)>) 可以保存的項目數目。當項目加入至 Dictionary<(Of <(TKey, TValue>)>) 時,容量會依需要藉由重新配置內部陣列而自動增加。
為了列舉型別的用途,會將字典中的每一個項目都視為表示一個值及其索引鍵的 KeyValuePair<(Of <(TKey, TValue>)>) 結構。未定義項目的傳回順序。
C# 語言 (在 C++ 中為 for each;在 Visual Basic 中為 For Each) 的 foreach 陳述式需要集合中每個項目的型別。因為 Dictionary<(Of <(TKey, TValue>)>) 是索引鍵和值的集合,所以項目型別不是索引鍵的型別或值的型別。相反,項目型別為索引鍵型別和實值型別的 KeyValuePair<(Of <(TKey, TValue>)>)。例如:
foreach (KeyValuePair<int, string> kvp in myDictionary) {...}
for each (KeyValuePair<int, String^> kvp in myDictionary) {...}
For Each kvp As KeyValuePair(Of Integer, String) In myDictionary
...
Next kvp
foreach 陳述式是列舉值周圍的包裝函式,它只允許從集合讀取,而不允許寫入集合。
注意事項: |
|---|
由於索引鍵可以繼承,而且其行為已變更,所以比較作業無法使用 Equals 方法來保證其絕對的唯一性。 |