C#:使用哈希表存储两个相同值。可能吗?

C#:使用哈希表存储两个相同值。可能吗?,c#,key,hashtable,C#,Key,Hashtable,我对C#编程相当陌生,我编写了一个使用哈希表存储数据的程序(在我的例子中,是用户名,以及它们是否“就绪”或“未就绪”)。我总共有两个表。第一个表的值框中的用户名和客户端的IP地址为键。第二个表的状态为就绪/未就绪(由组合框给出)作为键,IP地址作为值 第一个表不是问题,因为我不希望用户名再次出现。但是,在第二个表中,我需要多次出现就绪/未就绪状态。但是这不起作用,因为它说已经有一个名为“就绪”的键在哈希表中。有什么方法可以解决这个问题吗?您可以在第二个表中使用字典。这还有一个额外的优点,即插入/

我对C#编程相当陌生,我编写了一个使用哈希表存储数据的程序(在我的例子中,是用户名,以及它们是否“就绪”或“未就绪”)。我总共有两个表。第一个表的值框中的用户名和客户端的IP地址为键。第二个表的状态为就绪/未就绪(由组合框给出)作为键,IP地址作为值


第一个表不是问题,因为我不希望用户名再次出现。但是,在第二个表中,我需要多次出现就绪/未就绪状态。但是这不起作用,因为它说已经有一个名为“就绪”的键在哈希表中。有什么方法可以解决这个问题吗?

您可以在第二个表中使用
字典。这还有一个额外的优点,即插入/删除IP很快,因为它是哈希集中的一个键。

您可以在第二个表中使用
字典。这还有一个额外的优点,就是插入/r移动IP很快,因为它是哈希集中的一个键。

键必须是唯一的。如果您试图通过键访问一个值,它如何知道您真正想要的值?

键必须是唯一的。如果您试图通过键访问一个值,它如何知道您真正想要的值?

因此,第二个哈希表的原因是:冷静地看看谁准备好了,对吗

在这种情况下,考虑把它分成2个不同的集合:一个是为那些准备好的,一个是为那些没有准备好的。
最有可能的情况是,一个简单的在这里就可以了,因为你只需要看看谁在那里,而不是找到一个特定的(因为如果你想这样做,你可以查看另一个哈希表)。如果具有与哈希表相似的查找属性很重要,则可以使用,但这取决于您的需要。

因此,第二个哈希表的原因是快速查找准备就绪的用户,对吗

在这种情况下,考虑把它分成2个不同的集合:一个是为那些准备好的,一个是为那些没有准备好的。
最有可能的情况是,一个简单的在这里就可以了,因为你只需要看看谁在那里,而不是找到一个特定的(因为如果你想这样做,你可以查看另一个哈希表)。如果具有与哈希表相似的查找属性很重要,则可以使用,但这取决于您的需要。

听起来哈希表可能不是解决问题的理想数据结构

哈希表/字典中的键必须是唯一的,因此不,从技术上讲,不能在哈希表中存储两个共享完全相同键的条目


另外,您可能应该使用
字典,听起来哈希表可能不是解决问题的理想数据结构

哈希表/字典中的键必须是唯一的,因此不,从技术上讲,不能在哈希表中存储两个共享完全相同键的条目


另外,您可能应该使用
字典好的,我终于弄明白了。我有3个表。第一个表是Key:Username-Value:IP。第二个表是Key:IP-Value:Username。第三个表是Key:Username-Value:Ready/notready。然后我简单地引用htReady.Value(哈希表)。我的全部代码如下:。您要查看的部分是ChatServer类的开头、AddUser、RemoveUser和AcceptClient


我是新手,所以如果你能建议一个更好的方法,我洗耳恭听。

好的,我终于弄明白了。我有3个表。第一个表是Key:Username-Value:IP。第二个表是Key:IP-Value:Username。第三个表是Key:Username-Value:Ready/notready。然后我简单地引用htReady.Value(哈希表)。我的全部代码如下:。您要查看的部分是ChatServer类的开头、AddUser、RemoveUser和AcceptClient


我是新手,所以如果你能建议一个更好的方法,我洗耳恭听。

此外,我假设“哈希表”指的是概念,而不一定是类-在大多数情况下,由于类型安全性,a是一个更好的选择。此外,我假设“哈希表”您指的是概念,不一定是类-在大多数情况下,由于类型安全性,a是更好的选择。尽管用于区分双状态值(就绪/未就绪)字典似乎有点过火。因为他说的是组合框而不是复选框,我不确定是否有两个以上的状态。如果只有两个状态,那么使用两个哈希集(每个状态一个)肯定是首选。是的,只有两个状态。我基本上每个用户有3个值(ip地址、用户名、就绪/未就绪状态)。是否有方法显示哈希表的值字段而不是键?尽管用于区分双状态值(就绪/未就绪)字典似乎有点过火。因为他说的是组合框而不是复选框,我不确定是否有两个以上的状态。如果只有两个状态,那么使用两个哈希集(每个状态一个)肯定是首选。是的,只有两个状态。我基本上每个用户有3个值(ip地址、用户名、就绪/未就绪状态)。有没有办法显示哈希表的值字段而不是键?基本上,我试图创建的是一个与“就绪”非常类似的解决方案游戏中的系统,它通知主机用户是否准备好开始游戏。我应该发布服务器和客户端程序的代码吗?我不认为你需要为整个程序发布代码。我想有很多方法可以解决这个问题。你可以考虑的另一个方法是有一组未准备好的地址。最初,at包含所有人。当机器转换为“就绪”时,您只需将其从“未就绪”集中删除。当集合为空时,所有人都已就绪。哈希集也是一个不错的选择。好的,我终于解决了这个问题。我有3个表。第一个是
// Map containing two sets of IP addresses: those that are ready, 
// and those that are not ready.
var readyMap = new Dictionary<bool, HashSet<string>>();
readyMap[true] = new HashSet<string>();
readyMap[false] = new HashSet<string>();

// Add an IP address that is ready.
readyMap[true].Add(ipAddress1);

// Add an IP address that is not ready.
readyMap[false].Add(ipAddress2);