Actually my previous question got me thinking
and I realized that reversing a Dictionary
is not trivial.
What is the most elegant and readable way to do it?
To reverse a dictionary is very easy:
var newDic = oldDic.ToDictionary(x => x.Value, x => x.Key);
That's all.
Now, your question is different. It is about reversing a many-to-many relationship, established on a dictionary.
So, let's say you have Dictionary
For the first part, we will use the overload of SelectMany that
"Projects each element of a sequence to an IEnumerable
, flattens the resulting sequences into one sequence, and invokes a result selector function on each element therein."
var table =
dict.SelectMany(
x => x.Value,
(dictEntry, entryElement) => new
{
Entity1 = dictEntry.Key,
Entity2 = entryElement
}
);
So, now you just have to regroup this table the way you want, and then convert it to a dictionary.
var newDict =
table
.GroupBy(x => x.Entity2,
x => x.Entity1,
(entity2, entity1) => new {entity1, entity2})
.ToDictionary(x => x.entity2, x => x.entity1);