Пересечь общие значения из сгруппированного списка KeyValuePair в C # - PullRequest
0 голосов
/ 08 июня 2018

У меня есть список кортежей, состоящий из Id (Item1) и Value (Item2) следующим образом:

var tupleList = new List<Tuple<int, int>>
{
   Tuple.Create( 100, 1 ),
   Tuple.Create( 100, 1 ),
   Tuple.Create( 100, 2 ),
   Tuple.Create( 101, 1 ),
   Tuple.Create( 101, 2 ),
   Tuple.Create( 101, 3 ),
   Tuple.Create( 102, 1 ),
   Tuple.Create( 102, 2 ),
   Tuple.Create( 102, 3 )
 };

Цель состоит в том, чтобы найти общие значения (Item2) между каждым сгруппированным Id (Item1)) и добавить их в массив целых чисел.Используя этот пример, идентификаторы должны быть сгруппированы как 100, 101 и 102. Затем мне нужно извлечь только те значения, которые являются общими для ВСЕХ групп.

Другими словами, используя приведенный выше пример, окончательный выводбудет:

{ 1, 2 }

Обратите внимание, что я добавил дубликат записи для 100 в качестве теста - не уверен, если это вообще необходимо.

Надеюсь, это имеет смысл.Извиняюсь за то, что не предоставил никакого кода, так как я даже не уверен, как начать кодировать это.

1 Ответ

0 голосов
/ 08 июня 2018

Это подход, который необходимо учитывать:

var count = tupleList.Select(z => z.Item1).Distinct().Count();
var allThere = tupleList
    .GroupBy(z => z.Item2)
    .Where(z => z.Distinct().Count() == count)
    .Select(z => z.Key)
    .ToList();

Первая строка получает количество уникальных Item1 значений.

Вторая строка группирует исходные входы по Item2а затем подсчитывает количество строк.Если количество совпадает с count, то все они должны были быть там.

...