2011-07-12 67 views
0

我有一個哈希表,其中包含這樣的值:檢查C#中組合的哈希表鍵/值對?

關鍵:123456值:UV
關鍵:654321值:HV
...

現在我要檢查,如果一個組合已經存在並且不要插入任何東西。因此,如果我的密鑰是123456,而我的值是UV,則不會添加新條目。我怎麼能這樣做?

由於:-)

+2

HashTable鍵是唯一的。 – SLaks

+1

不推薦使用'HashTable'類;不要使用它,而是使用通用的'Dictionary'類(來自'System.Collections.Generic')。 –

回答

1

Hashtable甲(或,優選地,Dictionary<TKey, TValue>)包含用於存儲的密鑰只有一個值。所以,如果你添加一個新的鍵值對的集合,你可以簡單地這樣做之前檢查爲重點的存在:

static bool AddIfNotContainsKey<K,V>(this Dictionary<K,V> dict, K key, V value) 
{ 
    if (!dict.ContainsKey(key)) 
    { 
     dict.Add(key, value); 
     return true; 
    } 
    return false; 
} 

例子:

var dict = new Dictionary<string, string>(); 

dict.AddIfNotContainsKey("123456", "UV"); // returns true 
dict.AddIfNotContainsKey("654321", "HV"); // returns true 

dict.AddIfNotContainsKey("123456", "??"); // returns false 

string result = dict["123456"];   // result == "UV" 
+0

這是迄今爲止最好的答案:D – Odnxe

0

你可以用這樣的東西做一個函數,我已經嘗試過了,它正在工作。

class Program 
{ 
    static void Main() 
    { 
    Dictionary<string, bool> d = new Dictionary<string, bool>(); 
    d.Add("cat", true); 
    d.Add("dog", false); 
    d.Add("sprout", true); 

    // A. 
    // We could use ContainsKey. 
    if (d.ContainsKey("dog")) 
    { 
     // Will be 'False' 
     bool result = d["dog"]; 
     Console.WriteLine(result); 
    } 

    // B. 
    // Or we could use TryGetValue. 
    bool value; 
    if (d.TryGetValue("dog", out value)) 
    { 
     // Will be 'False' 
     bool result = value; 
     Console.WriteLine(result); 
    } 
    } 
} 
+0

我認爲你的嘗試獲得價值會返回true。 – Odnxe

1

使用包含哈希表的方法,並作爲@dtb說Hashtable中包含了一個關鍵的一個值,所以你的情況,如果你需要有東西像(「KEY1」,「值1」), (「key1」,「value2」),那麼可能更適合存儲這個對,因爲這個值的存在完全有效。