如果这是一个重复的问题,请道歉,但是关于检索重复值对键值的类似问题并不足以让我理解如何使用它。
我目前正在使用包含文本的列表字典并使用lists.Intersect将列表相互比较。我如何获取其中两个列表中有重复项的键值?这是我的代码:
private string findDuplicates(Dictionary<int, List<string>> lists)
{
List<string> intersection = new List<string>();
int i;
int j;
for (i = 0; i < 13; i++)
{
for (j = i + 1; j < 13; j++)
{
intersection.Add(String.Join(" ", lists[i].Intersect(lists[j])).ToString());
};
//Attempt to retrieve value
if (intersection.Count > 0)
{
numberOfDomainsTB.Text += "\nLocations:\nList " + i + " and List " + j;
}
};
我认为普通词典的其他方法是:
lists.GroupBy(x => x.Value).Where(x => x.Count() > 1);
但这并没有比较列表的内部价值。
感谢。
答案 0 :(得分:1)
private string findDuplicates(Dictionary<int, List<string>> lists)
{
List<string> intersection = new List<string>();
int i;
int j;
string compare = "";
for (i = 0; i < lists.Count - 1; i++)
{
for (j = i + 1; j < lists.Count - 1; j++)
{
compare = String.Join(" ", lists[i].Intersect(lists[j])).ToString();
if (!String.IsNullOrEmpty(compare))
{
intersection.Add(String.Join(" ", lists[i].Intersect(lists[j])).ToString());
}
};
};
}
我通过实现交叉来修复此问题。添加将始终向列表添加新值,无论它是否为空。因此,任何比较都将始终显示与每个列表的匹配。所以我选择两次交叉:一次存储在一个字符串中,然后检查是否为空/空,如果不是则再次在intersection.Add行中实际添加相交的值。
注意:我最近不需要使用字典。它只是以前尝试执行此任务的残余。任何普通的清单都可以。