【问题标题】:c# Finding pairs in dictionaryc# 在字典中查找对
【发布时间】:2015-03-05 13:36:41
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您能举例说明字典中的内容以及您想要返回的内容吗?也不清楚您是否已经知道要查找的字符串。
  • 旁注:double 不是一个好的选择键,因为舍入错误

标签: c# string dictionary


【解决方案1】:

我相信,对于那些在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

【讨论】:

  • 好吧,我想我没有误解,但这个问题的措辞很糟糕。
  • @Selman22, no 它是关于在字典中配对String 值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-05
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多