检查C#中组合的Hashtables键/值对?

时间:2011-07-12 15:02:39

标签: c# hashtable

我有一个Hashtable,其中包含如下值:

键:123456值:UV
键:654321值:HV
...

现在我想检查一个组合是否已经存在并且不要插入任何东西。因此,如果我的密钥是123456并且我的值是UV,则不会添加任何新条目。我怎么能这样做?

谢谢: - )

3 个答案:

答案 0 :(得分: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"

答案 1 :(得分:1)

使用Hashtable的Contains方法,并且@dtb表示Hashtable包含一个键的值,所以在你的情况下你需要像(“key1”,“value1”),(“key1”) ,“value2”)然后可能是更合适的存储该对作为关键使这个值的存在完全有效。

答案 2 :(得分: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);
    }
    }
}