Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中使用哈希表类处理冲突#_C#_Hashtable_Hash Collision - Fatal编程技术网

C# 在c中使用哈希表类处理冲突#

C# 在c中使用哈希表类处理冲突#,c#,hashtable,hash-collision,C#,Hashtable,Hash Collision,在下面的场景中,如何使用哈希表类在C#中处理或实现冲突?如果'Key'值相同,我将得到一个“参数异常” 我的期望: 在“Value”参数中,我需要做些什么来回避“冲突”问题。我试图检查字符串是否由唯一字符组成。您似乎误解了哈希表类的工作原理(自2005年以来,它一直被弃用-使用字典,但其行为在这里是相同的) 似乎您希望您的工作是获取对象的哈希代码并将其添加到哈希表中。事实并非如此。您只需添加要用作键的对象(每个字符),内部实现将提取哈希代码 但是,即使您自己添加了关键对象,您实际执行的操作也不会

在下面的场景中,如何使用哈希表类在C#中处理或实现冲突?如果'Key'值相同,我将得到一个“参数异常”

我的期望:
在“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正确。哈希表具有唯一键。另外,你应该使用
字典
。是的,我确实理解“键”不能复制的事实,但我只是在寻找我的“值”可以保存复制字符的方法。只需将字符添加为键和值。是的,我确实理解“键”不能复制的事实,但我只是在寻找我的“值”可以保存复制字符的方法。只需添加字符作为键和值。