Задать вопрос
Geronom
@Geronom
C#, .Net, Vue.js, БД

Поиск и объединение данных по условию в ConcurrentQueue / Dictionary – как?

Приветствую!

Имеется словарь, в котором записаны ключ и набор некоторых строковых данных.

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.

Пробовал разные варианты, но так и не получилось что-то стоящее.
  • Вопрос задан
  • 241 просмотр
Подписаться 1 Простой 33 комментария
Пригласить эксперта
Ответы на вопрос 2
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
давайте сначала разрулим синтаксис ConcurrentQueue>> pairs = new ConcurrentQueue>>(); и тег C#
.. потом может и до LINQ получится добраться
ps
xtT0UzQ.png
так так так.. значит:
- точно есть проблемы с тегом код
смотри сюда
AYIH3cM.png

- выбирай C#.. ну и пойми - скопируешь код так, что бы я (ну в НЕ личностях дело уже) смог его испробовать - тогда и только тогда, получишь точный ответ
Ответ написан
@d-stream
Готовые решения - не подаю, но...
Если речь идет об очереди - то не надо пытаться вывернуть ее мехом наружу. Её основное предназначение - очередь FIFO. То есть какие-то процессы гадят в эту очередь, а какие-то другие разбирают из нее в порядке поступления. Ближайший пример - аптека с "электронной очередью": расставлено возле каждого входа по несколько терминалов, где в произвольный момент по нажатию кнопки печатается чек с номером. А потом с этим номером высвечивается табло над одним из свободных окошек...

А если уж добывать что-то синтетическое - то из словарей, списков и т.п. с приставкой Concurrent или без.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы