LINQ变换Dictionary <key,value> to Dictionary <value,key>

cod*_*ife 38 c# linq

我有一个低脑波日...有没有人知道一种快速而优雅的方式来转换一个字典,以便键成为价值,反之亦然?

例:

var originalDictionary = new Dictionary<int, string>() {
    {1, "One"}, {2, "Two"}, {3, "Three"}
};
Run Code Online (Sandbox Code Playgroud)

var newDictionary = new Dictionary<string, int>();
// contents:  
// { 
//    {"One", 1}, {"Two", 2}, {"Three", 3} 
// };
Run Code Online (Sandbox Code Playgroud)

dri*_*iis 82

使用ToDictionary

orignalDictionary.ToDictionary(kp => kp.Value, kp => kp.Key);
Run Code Online (Sandbox Code Playgroud)

这是因为IDictionary<TKey,TElement>; 也是一个IEnumerable<KeyValuePair<TKey,TElement>>; 请注意,如果您有重复的值,您将获得异常.

如果您有重复值,则需要决定如何处理它们.一种简单的方法是首先通过对Value进行分组来忽略重复,然后创建字典.

originalDictionary
.ToLookup(kp => kp.Value)
.ToDictionary(g => g.Key, g => g.First().Key);
Run Code Online (Sandbox Code Playgroud)

  • +1处理重复值问题的好方法. (4认同)

Gio*_*rgi 9

这个给你:

var reversed = orignalDictionary.ToDictionary(el => el.Value, el => el.Key);