Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ变换字典<;关键、价值>;到字典<;价值,关键>;_C#_Linq - Fatal编程技术网

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);