Я хочу сгруппировать список пар «ключ-значение» по ключу, а затем сгруппировать все ключи, имеющие одинаковый список значений.
Вот пример
| Key | Value |
|:----|------:|
| 1 | A |
| 1 | B |
| 1 | C |
| 2 | A |
| 2 | B |
| 3 | A |
Вот результат, который я хотел бы получить
| Keys | Values |
|:-----|-------:|
| 1,2 | A,B |
| 1 | C |
| 3 | A |
Я начал с классического GroupBy
, но застрял на втором шаге, чтобы сгруппировать ключи
var pairs = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("1", "A"),
new KeyValuePair<string, string>("1", "B"),
new KeyValuePair<string, string>("1", "C"),
new KeyValuePair<string, string>("2", "A"),
new KeyValuePair<string, string>("2", "B"),
new KeyValuePair<string, string>("3", "A")
};
var groupingFirstStep = pairs.GroupBy(p => p.Key);
| Key | Values |
|:-----|-------:|
| 1 | A,B,C |
| 2 | A,B |
| 3 | A |
Другие примеры: слева ввод, справа ожидаемый результат
| Key | Value | | Keys | Values |
|:----|------:| |:-----|-------:|
| 1 | A | | 1,2 | A,B |
| 1 | B |
| 2 | A |
| 2 | B |
| Key | Value | | Keys | Values |
|:----|------:| |:-----|-------:|
| 1 | A | | 1,2 | A,B |
| 1 | B | | 1 | C |
| 1 | C |
| 2 | A |
| 2 | B |
| Key | Value | | Keys | Values |
|:----|------:| |:-----|-------:|
| 1 | A | | 1,2 | A,B |
| 1 | B | | 1,3 | C |
| 1 | C | | 3 | A |
| 2 | A |
| 2 | B | Other possibility
| 3 | A | | 1,3 | A,C |
| 3 | C | | 1,2 | B |
| 2 | A |