c# 在字典中查找对

c# Finding pairs in dictionary

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

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

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

现在我觉得这可能不是处理此问题的最佳解决方案。是否有其他方法可以在字典中找到这些对,或者这是循环执行此操作的唯一真正方法吗?

我相信,您希望为那些在 Values 中有一对可用字符串的项目获取 Keys

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"}
};

对于 LINQ 表达式后的输出:

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

输出:

1
2
3
4