在c#中检查哈希表的键/值对是否有组合

本文关键字:是否 组合 检查 哈希表 | 更新日期: 2023-09-27 18:02:31

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

键:123456值:UV
关键字:654321值:HV

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

谢谢:-)

在c#中检查哈希表的键/值对是否有组合

哈希表(或者,最好是Dictionary<TKey,>)只包含一个存储键的值。因此,如果向集合中添加新的键-值对,则只需在执行此操作之前检查该键是否存在:

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"

使用哈希表的Contains方法,正如@dtb所说,哈希表包含一个键的值,所以在您的情况下,如果您需要("key1","value1"), ("key1","value2")这样的东西,那么可能更适合将这对存储为键,使这些值的存在完全有效。

你可以用这样的东西创建一个函数,我已经尝试过了,它正在工作。

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);
    }
    }
}