Приветствую!
Имеется словарь, в котором записаны ключ и набор некоторых строковых данных.
IEnumerable<string> test1 = new List<string>()
{
"текст 1",
"текст 2",
"текст 3",
"текст 4",
"текст 5"
};
IEnumerable<string> test2 = new List<string>()
{
"текст 01",
"текст 02",
"текст 03",
"текст 3",
"текст 4",
"текст 5"
};
IEnumerable<string> test3 = new List<string>()
{
"текст 1",
"текст 2",
"текст 3",
"текст 49870",
"текст 687"
};
IEnumerable<string> test4 = new List<string>()
{
"текст 01",
"текст 02",
"текст 03",
"текст 411",
"текст 611"
};
ConcurrentQueue<Dictionary<string, IEnumerable<string>>> pairs = new ConcurrentQueue<Dictionary<string, IEnumerable<string>>>();
pairs.Enqueue(new Dictionary<string, IEnumerable<string>> { { "ключ 1", test1 }});
pairs.Enqueue(new Dictionary<string, IEnumerable<string>> { { "ключ 2", test2 } });
pairs.Enqueue(new Dictionary<string, IEnumerable<string>> { { "ключ 3", test3 } });
pairs.Enqueue(new Dictionary<string, IEnumerable<string>> { { "ключ 4", test4 } });
Как получить из pairs следующий результат:
Объединение №1
Объединены: 1, 3
Объединение №2
Объединены: 2, 4
Основное правило объединения это наличие в одном объединении только тех ключей, в которых имеются общие значения и минимальное количество таких общих значений равно 3.
То есть в urls1 и urls3 совпадает 2 значение: текст 1, текст 2, текст 3. В это объединение не входит urls2, так как у него есть общие значения только с urls1, но не с urls3.
Пробовал разные варианты, но так и не получилось что-то стоящее.