首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ transform Dictionary<key,value> to Dictionary<value,key>

LINQ transform Dictionary<key,value> to Dictionary<value,key>
EN

Stack Overflow用户
提问于 2010-06-04 01:31:56
回答 4查看 23.2K关注 0票数 42

我今天的脑电波很低...有没有人知道一种快速而优雅的方法来转换字典,使键变成值,反之亦然?

示例:

代码语言:javascript
复制
var originalDictionary = new Dictionary<int, string>() {
    {1, "One"}, {2, "Two"}, {3, "Three"}
};

变成了

代码语言:javascript
复制
var newDictionary = new Dictionary<string, int>();
// contents:  
// { 
//    {"One", 1}, {"Two", 2}, {"Three", 3} 
// };
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-04 01:34:21

使用ToDictionary

代码语言:javascript
复制
orignalDictionary.ToDictionary(kp => kp.Value, kp => kp.Key);

这之所以有效,是因为% IDictionary<TKey,TElement>;也是% IEnumerable<KeyValuePair<TKey,TElement>>;。请注意,如果你有重复的值,你会得到一个异常。

如果您有重复的值,您将需要决定如何处理它们。一种简单的方法是先按值分组来忽略重复项,然后再创建字典。

代码语言:javascript
复制
originalDictionary
.ToLookup(kp => kp.Value)
.ToDictionary(g => g.Key, g => g.First().Key);
票数 90
EN

Stack Overflow用户

发布于 2010-06-04 01:34:56

您的位置如下:

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

票数 9
EN

Stack Overflow用户

发布于 2010-06-04 01:42:56

我同意所提供的答案,但是您应该考虑并在您的程序中进行更改,以便实际使用<key, value>进行设置,而不是在之后进行此更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2968356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档