我想构建二维集合,我需要键值对的唯一组合。例如,域“公司”(Id:1)可以具有MachineName“Machine1”和“Machine2”,但不能再次添加另一个MachineName“Machine1”。另一个域“Corporate”(Id:2)可以有另一个machineName“Machine1”。
这里我的收藏品就像这个1-Machine1,1-Machine2,2-Machine1。 添加1-Machine1或2-Machine1应该是无效输入。 请为此建议数据类型或方法。 我不能用Dict>数据类型,因为如果大小增加,它可能会妨碍性能。
答案 0 :(得分:2)
我很抱歉,但是根据你的描述,它仍然听起来像是一个字典实现很合适。
如果应用程序的性能因字典的速度而受到影响,那么您可以重新查看问题并推出自己专门定制的解决方案。
答案 1 :(得分:1)
你可以这样做:
Dictionary<String, List<String>> mapping = new Dictionary<string, List<string>>();
mapping.Add("1",new List<string>());
mapping["1"].Add("Machine1");
mapping["1"].Add("Machine2");
这将为您提供域和计算机之间的一对多映射。
或NameValueCollection
类也会这样做。
答案 2 :(得分:1)
所以你需要一种带有唯一键的集合,这个集合中的每个项目都是唯一的。
所以,你真的在谈论一本字典,其中字典中的值是一个独特的集合。
假设你只是在谈论字符串,我会使用类似的东西:
Dictionary<string, HashSet<string>>
如果我错了,有人会纠正我,但我认为使用这些通用结构的好处是你可以(马上蝙蝠),做到这一点:
Dictionary<string, HashSet<string>> domains = new Dictionary<string, HashSet<string>>();
domains["Domain1"].Add("Machine1");
答案 3 :(得分:0)
您是否需要能够有效地查找具有给定计算机名称的域列表?否则,Hashtable<String, HashSet<String>>
似乎很合适。
如果更改默认值以使其不具有区分大小或文化敏感性,那么似乎还有一些名为NameValueCollection
的东西可能是合适的。
答案 4 :(得分:0)
您没有说明这是一项要求,但我的猜测是您还需要能够查询特定“域”的所有计算机的数据结构。防爆。列出属于公司1的机器。这是我能想到使用字典的性能可能不可接受的唯一原因(因为你必须遍历整个列表才能找到所有匹配的条目)。
在这种情况下,您可以考虑将数据表示为树。
编辑:
根据您上面的评论,您可以将您的密钥连接为字符串,并使用HashSet检查您是否已经存储了该密钥。