C# 在c中使用哈希表类处理冲突#
在下面的场景中,如何使用哈希表类在C#中处理或实现冲突?如果'Key'值相同,我将得到一个“参数异常” 我的期望:C# 在c中使用哈希表类处理冲突#,c#,hashtable,hash-collision,C#,Hashtable,Hash Collision,在下面的场景中,如何使用哈希表类在C#中处理或实现冲突?如果'Key'值相同,我将得到一个“参数异常” 我的期望: 在“Value”参数中,我需要做些什么来回避“冲突”问题。我试图检查字符串是否由唯一字符组成。您似乎误解了哈希表类的工作原理(自2005年以来,它一直被弃用-使用字典,但其行为在这里是相同的) 似乎您希望您的工作是获取对象的哈希代码并将其添加到哈希表中。事实并非如此。您只需添加要用作键的对象(每个字符),内部实现将提取哈希代码 但是,即使您自己添加了关键对象,您实际执行的操作也不会
在“Value”参数中,我需要做些什么来回避“冲突”问题。我试图检查字符串是否由唯一字符组成。您似乎误解了哈希表类的工作原理(自2005年以来,它一直被弃用-使用
字典,但其行为在这里是相同的)
似乎您希望您的工作是获取对象的哈希代码并将其添加到哈希表中。事实并非如此。您只需添加要用作键的对象(每个字符),内部实现将提取哈希代码
但是,即使您自己添加了关键对象,您实际执行的操作也不会起作用。您将获取一个输入字符串(比如“test”),并将每个字符作为键添加到哈希表中。但是,根据定义,由于键是唯一的,您将添加两次字符“t”(它在输入中显示两次),因此您将得到一个异常。您似乎误解了哈希表类的工作原理(自2005年以来,它一直被弃用-使用字典,但其行为在这里是相同的)
似乎您希望您的工作是获取对象的哈希代码并将其添加到哈希表中。事实并非如此。您只需添加要用作键的对象(每个字符),内部实现将提取哈希代码
但是,即使您自己添加了关键对象,您实际执行的操作也不会起作用。您将获取一个输入字符串(比如“test”),并将每个字符作为键添加到哈希表中。但是,根据定义,由于键是唯一的,您将添加两次字符“t”(它在输入中显示两次),因此您将得到一个异常。如前所述,您可能应该为此切换到字典类
如果你想避开碰撞问题,那么你必须检查钥匙是否存在
Dictionary<string, object> dictValues = new Dictionary<string, object>();
另一种可能是,如果您不想为同一个键保留以前的值:
dictValues[YourKey] = YourValue;
这将添加键条目(如果它尚未存在)。如果是,它将用给定的输入覆盖其值。如前所述,为此,您可能应该切换到字典
类
如果你想避开碰撞问题,那么你必须检查钥匙是否存在
Dictionary<string, object> dictValues = new Dictionary<string, object>();
另一种可能是,如果您不想为同一个键保留以前的值:
dictValues[YourKey] = YourValue;
这将添加键条目(如果它尚未存在)。如果是,它将用给定的输入覆盖其值
我试图检查字符串是否由唯一字符组成
然后您只需要不带值的键,这就是HashSet
的用途
var chars = new HashSet<char>();
foreach (char c in input)
{
if (chars.Contains(c))
{
// c is not unique
}
else
{
chars.Add(c);
}
}
我试图检查字符串是否由唯一字符组成
然后您只需要不带值的键,这就是HashSet
的用途
var chars = new HashSet<char>();
foreach (char c in input)
{
if (chars.Contains(c))
{
// c is not unique
}
else
{
chars.Add(c);
}
}
你到底想做什么?ArgumentException正确。哈希表具有唯一键。另外,你应该使用字典。你到底想做什么?ArgumentException正确。哈希表具有唯一键。另外,你应该使用字典
。是的,我确实理解“键”不能复制的事实,但我只是在寻找我的“值”可以保存复制字符的方法。只需将字符添加为键和值。是的,我确实理解“键”不能复制的事实,但我只是在寻找我的“值”可以保存复制字符的方法。只需添加字符作为键和值。