C# LINQ变换字典<;关键、价值>;到字典<;价值,关键>;
我今天脑波很小。。。有人知道一种快速而优雅的方法来转换字典,使键成为值,反之亦然吗 例如:C# LINQ变换字典<;关键、价值>;到字典<;价值,关键>;,c#,linq,C#,Linq,我今天脑波很小。。。有人知道一种快速而优雅的方法来转换字典,使键成为值,反之亦然吗 例如: var originalDictionary = new Dictionary<int, string>() { {1, "One"}, {2, "Two"}, {3, "Three"} }; var originalDictionary=新字典(){ {1,“一”},{2,“二”},{3,“三”} }; 变成 var newDictionary = new Dictionary&
var originalDictionary = new Dictionary<int, string>() {
{1, "One"}, {2, "Two"}, {3, "Three"}
};
var originalDictionary=新字典(){
{1,“一”},{2,“二”},{3,“三”}
};
变成
var newDictionary = new Dictionary<string, int>();
// contents:
// {
// {"One", 1}, {"Two", 2}, {"Three", 3}
// };
var newDictionary=newDictionary();
//内容:
// {
//{“一”,1},{“二”,2},{“三”,3}
// };
使用什么
这是因为IDictionary
;也是一个IEnumerable
;。请注意,如果您有重复的值,您将得到一个异常
如果有重复的值,则需要决定如何处理它们。一种简单的方法是,通过先按值分组,然后生成字典来忽略重复项
originalDictionary
.ToLookup(kp => kp.Value)
.ToDictionary(g => g.Key, g => g.First().Key);
给你:
var reversed=orignalDictionary.ToDictionary(el=>el.Value,el=>el.Key)代码> 我同意所提供的答案,但是你应该考虑并改变你的程序来实际地与<代码> <代码>一起设置,而不是在之后做出改变。 在应用程序中有一个特定的上下文,你有1对1关系还是全局的?如果是后者,您可能需要查看原则上同意的。。但问题是,原始字典有一个特定的用途,而不是进行另一个soap调用,它更方便地将我所拥有的转换为另一个库,该库需要相同的信息,但键/值是颠倒的。当我使用您的示例涉及ToLookup
,我得到“'System.Linq.IGrouping'不包含'Value'的定义。我必须在我的字典上单独使用ToDictionary
。@Sarah,听起来你在对已经分组的序列使用ToLookup。我指定的泛型类型
与映射不匹配,例如:originalDic.ToDictionary(…)
vs允许系统推断类型originalDic.ToDictionary(…)
,这对我很有帮助。如果您想指定它,您必须执行类似于originalDic.ToDictionary(…)
的操作。在这种情况下,将是originalDic.ToDictionary(…)
公共静态词典ToDictionary(…)
originalDictionary
.ToLookup(kp => kp.Value)
.ToDictionary(g => g.Key, g => g.First().Key);