Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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#_.net_.net 2.0_Collections - Fatal编程技术网

C# C语言中的唯一键值集合

C# C语言中的唯一键值集合,c#,.net,.net-2.0,collections,C#,.net,.net 2.0,Collections,我想建立二维集合,在这里我需要键值对的唯一组合。例如,域公司Id:1可以有MachineName Machine1和Machine2,但不能再次添加另一个MachineName Machine1。另一个域公司Id:2可以有另一个machineName Machine1 在这里,我的收藏将像这台1-Machine1,1-Machine2,2-Machine1。 添加1-Machine1或2-Machine1应为无效条目。 请为此建议数据类型或方法。 我不能使用Dict>数据类型,因为如果大小增加,

我想建立二维集合,在这里我需要键值对的唯一组合。例如,域公司Id:1可以有MachineName Machine1和Machine2,但不能再次添加另一个MachineName Machine1。另一个域公司Id:2可以有另一个machineName Machine1

在这里,我的收藏将像这台1-Machine1,1-Machine2,2-Machine1。 添加1-Machine1或2-Machine1应为无效条目。 请为此建议数据类型或方法。
我不能使用Dict>数据类型,因为如果大小增加,它可能会影响性能。

很抱歉,但从您的描述来看,字典实现听起来还是很合适的


如果应用程序的性能因字典的速度而受到影响,那么您可以重新考虑这个问题,并推出自己专门定制的解决方案。

很抱歉,但从您的描述来看,字典实现听起来还是很合适的


如果应用程序的性能由于字典的速度而受到影响,那么您可以重新考虑这个问题并推出自己专门定制的解决方案。

您需要能够高效地查找具有给定机器名的域列表吗?否则,哈希表似乎非常适合


似乎还有一种叫做NameValueCollection的东西,如果您更改默认值,使其不区分大小写或区域性,这可能是一个很好的选择。

您需要能够高效地查找具有给定计算机名的域列表吗?否则,哈希表似乎非常适合


似乎还有一种叫做NameValueCollection的东西,如果您更改默认值,使其不区分大小写或区域性,这可能是一个很好的选择。

您没有将此作为一项要求,但我的猜测是,您还需要能够查询特定域中所有计算机的数据结构。列出属于公司1的机器。这是我能想到的使用字典的性能可能不可接受的唯一原因,因为您必须遍历整个列表才能找到所有匹配的条目

在这种情况下,您可以考虑将数据表示为树。< /P> 编辑:


根据上面的评论,您可以将密钥连接为字符串,并使用哈希集检查是否已存储该密钥。

您没有将此作为要求,但我猜您还需要能够查询特定域中所有计算机的数据结构。列出属于公司1的机器。这是我能想到的使用字典的性能可能不可接受的唯一原因,因为您必须遍历整个列表才能找到所有匹配的条目

在这种情况下,您可以考虑将数据表示为树。< /P> 编辑:


根据上面的评论,您可以将密钥连接为字符串,并使用哈希集检查是否已存储该密钥。

您可以执行以下操作:

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类也会这样做

您可以这样做:

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类也会这样做

因此您需要某种具有唯一键的集合,并且该集合中的每个项都是唯一的

实际上,您所说的字典中的值是唯一的集合

假设你只是在谈论字符串,我会使用类似于:

Dictionary<string, HashSet<string>>
如果我错了,有人会纠正我,但我认为使用这些通用结构的优点是,您可以立即执行以下操作:

Dictionary<string, HashSet<string>> domains = new Dictionary<string, HashSet<string>>();
domains["Domain1"].Add("Machine1");

因此,您需要某种具有唯一键的集合,并且该集合中的每个项都是唯一的

实际上,您所说的字典中的值是唯一的集合

假设你只是在谈论字符串,我会使用类似于:

Dictionary<string, HashSet<string>>
如果我错了,有人会纠正我,但我认为使用这些通用结构的优点是,您可以立即执行以下操作:

Dictionary<string, HashSet<string>> domains = new Dictionary<string, HashSet<string>>();
domains["Domain1"].Add("Machine1");

不。我不能。如果我想使用字典,那么我必须将DomainId作为键,将MachineName列表作为值。对于每个值添加,我必须检查第一个键是否存在,如果不添加键。若键存在,则检查值是否存在若否,则向列表中添加值,否则跳过添加。相对而言,看起来可能类似于检查键是否存在,如果是,则检查列表中是否存在值,然后继续执行程序。我认为您不必执行这些检查。我认为有了字典,你就可以盲目地引用myDomains[domain1]。如果domain1条目已经存在,则指向该条目。如果它不在那里,它会创造它。我不会。如果我想用字典,那我就不会了

o保持DomainId为键,MachineName列表为值。对于每一个值添加,我必须检查第一个键是否存在,如果没有添加键。若键存在,则检查值是否存在若否,则向列表中添加值,否则跳过添加。相对而言,看起来可能类似于检查键是否存在,如果是,则检查列表中是否存在值,然后继续执行程序。我认为您不必执行这些检查。我认为有了字典,你就可以盲目地引用myDomains[domain1]。如果domain1条目已经存在,则指向该条目。如果它不在那里,它将创建它。这不会阻止您执行映射[1]。但请再次添加Machine1。。。我认为机器必须是唯一的。没错,您必须进行检查。这不会阻止您进行映射[1]。不过,请再次添加机器1。。。我相信机器必须是独一无二的。是的,你必须做检查。我用的是C2.0。所以不能使用HashSet@mandar-真遗憾。。。有什么特别的原因不能将3.5作为目标吗?很抱歉,这是一个遗留应用程序,大约4-5年前开发的。@mandar,NameValueCollection呢?从cursoru对文档的浏览来看,它似乎大致相同?我使用的是C 2.0。因此无法使用HashSet@mandar-真遗憾。。。有什么特别的原因不能将3.5作为目标吗?很抱歉,这是一个遗留应用程序,大约4-5年前开发的。@mandar,NameValueCollection呢?粗略地看一下文档,它似乎大致相同?是的,没错:字典中的值是唯一的集合。但是,没有字典,还有其他选择吗。我不介意在这种情况下复制密钥domainId。因为我只有添加、清除或迭代组合。可能是某种确保唯一键值组合的数据类型。我仍然不确定为什么有字典是个问题。这是一种基于密钥检索对象的非常快速的结构。即使域列表变得非常大,您仍然可以在大约O1时间内访问它的计算机列表。是的,正确:字典中的值是唯一的集合。但是,没有字典,还有其他选择吗。我不介意在这种情况下复制密钥domainId。因为我只有添加、清除或迭代组合。可能是某种确保唯一键值组合的数据类型。我仍然不确定为什么有字典是个问题。这是一种基于密钥检索对象的非常快速的结构。即使域列表变得非常大,您仍可以在大约O1时间内访问其计算机列表。您担心的性能是域集合的大小还是计算机集合的大小?字典应该是一种性能非常好的数据类型—它是使用哈希表实现的。在性能方面,您担心的是域集合的大小还是机器集合的大小?字典应该是一种性能非常好的数据类型——它是使用哈希表实现的。