c# - LINQ 将 Dictionary<key,value> 转换为 Dictionary<value,key>

标签 c# linq

我今天心情低落...有谁知道一种快速而优雅的方法来转换字典,使键变成值,反之亦然?

例子:

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

成为

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

最佳答案

使用ToDictionary

orignalDictionary.ToDictionary(kp => kp.Value, kp => kp.Key);

这是有效的,因为 IDictionary<TKey,TElement> ;也是一个 IEnumerable<KeyValuePair<TKey,TElement>> ;.请注意,如果您有重复的值,则会出现异常。

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

originalDictionary
.ToLookup(kp => kp.Value)
.ToDictionary(g => g.Key, g => g.First().Key);

关于c# - LINQ 将 Dictionary<key,value> 转换为 Dictionary<value,key>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2968356/

相关文章:

c# - 查询主体必须以 select 子句或 group 子句结尾为什么这里会出错?

java - 公开成员以对其进行单元测试

C# 7 带空检查的开关盒

C#——从 MySQL 检索数据并在 "pages"中对它们进行排序,而不使用 DataGridView

c# - 如何正确使用 LINQ 和 MySQL?

用于选择 FirstName.length < 6 的潜在顾客的 LINQ

c# - 为什么 LINQ 不喜欢内联日期计算?

c# - SignalR disconnect 在互联网断开/重新连接时未被调用

c# - 打开PDF文件中的特定页面c#

c# - 无法将方法组 'FirstOrDefault' 转换为非委托(delegate)类型