c#在字典中查找对

时间:2015-03-05 13:36:42

标签: c# string dictionary

对于我的项目,我创建了一个字典,其中包含一个随机的double和一个属于该double的字符串: Dictionary<double, string> myDict = new Dictionary<double, string>();

对于这个项目,我知道double是一个随机值,并且在字典中所有字符串都是唯一的,除了大约80%,其中一个是字典中的两倍。 所以我想要做的是找到两个字符串是一对(相同的字符串)并找到属于这两个字符串的2个双精度值。

基本上我这样做的想法是使用IEnumerator counter = myDict.GetEnumerator();并使用while (counter.MoveNext() == true)启动另一个IEnumerator,它再次循环遍历字典的所有条目并按字符串进行比较,因此如果找到对这条路。 因此,对于字典中的每个条目,它将再次遍历整个字典以查找对。

现在我觉得这可能不是解决这个问题的最佳解决方案。是否有替代方法可以找到字典中的对,或者这是通过唯一真正的方式循环?

1 个答案:

答案 0 :(得分:3)

我相信,您希望Keys获取Values中有一对字符串的项目var result = myDict.GroupBy(r => r.Value) .Where(grp => grp.Count() == 2) .SelectMany(grp => grp.Select(subItem => subItem.Key)) .ToList();

.Where(grp => grp.Count() >= 2)

如果您想获取具有多个字符串值的项目的密钥,(两个以上),请将条件修改为:

Random

要添加的另一件事是,您在字典中添加了Random个值的键。请注意,Unique并不代表Dictionary。由于Dictionary<double, string> myDict = new Dictionary<double, string> { {1, "ABC"}, {2, "ABC"}, {3,"DEF"}, {4,"DEF"}, {5,"DEF2"}, {6,"XYZ"} }; 键是唯一的,因此您可能会遇到异常。

如果您的字典定义为:

foreach (var d in result)
{
    Console.WriteLine(d);
}

对于LINQ表达式后的输出:

1
2
3
4

输出:

{{1}}