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
对于我的项目,我制作了一个字典,其中包含一个随机双精度和一个属于该双精度的字符串:
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