在c#中检查哈希表的键/值对是否有组合
本文关键字:是否 组合 检查 哈希表 | 更新日期: 2023-09-27 18:02:31
我有一个Hashtable,它包含如下值:
键:123456值:UV
关键字:654321值:HV
…
现在我想检查一个组合是否已经存在,不插入任何东西。因此,如果我的键是123456,值是UV,则不会添加新条目。我怎么能这么做?
谢谢:-)
哈希表(或者,最好是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);
}
}
}