c# - 使用 Linq 将一个字典映射到另一个字典
问题描述
有没有一种优雅的方法可以Dictionary
在.NET 框架中使用 Linq 将一个映射到另一个?
这可以通过枚举来完成foreach
:
var d1 = new Dictionary<string, string>() {
{ "One", "1" },
{ "Two", "2" }
};
// map dictionary 1 to dictionary 2 without LINQ
var d2 = new Dictionary<string, int>();
foreach(var kvp in d1) {
d2.Add(kvp.Value, int.Parse(kvp.Value));
}
...但我正在寻找一些方法来完成 LINQ:
// DOES NOT WORK
Dictionary<string, int> d2 =
d1.Select(kvp => {
return new KeyValuePair<string, int>(kvp.Key, int.Parse(kvp.Value));
})
解决方案
只需使用命名空间ToDictionary
中的扩展方法System.Linq
var d2 = d1.ToDictionary(kvp => kvp.Key, kvp => int.Parse(kvp.Value));
由于Dictionary<TKey, TValue>
类实现IEnumerable<KeyValuePair<TKey,TValue>>
并且ToDictionary
是IEnumerable<T>
上述代码的扩展方法工作正常
推荐阅读
- javascript - 带有 cookie 的 JS 预选下拉选项创建不可见的下拉选项
- r - 如何在 MLR 包中使用 Leave one out 调整分类阈值?
- excel - Excel VBA匹配不同工作簿上的标题名称并将列复制到主工作簿
- excel - 输出到 csv 时的 Powershell 奇怪行为
- c - 任何人都可以在 c 中为我简化此代码吗?
- mysql - SQL 插入到表中。有值 =(插入前的值)+ 一个数字(例如 1000)
- here-api - HERE Maps matchLevel 参数不起作用
- google-sheets - 从 Google Sheet 中的 QUERY 函数更改列的格式
- opl - 答案不符合约束条件
- android-studio - Android Studio:编写一个构建任务,以便在运行时通过其名称可访问的 declare-stylable 中的 enum-formatted attr 中获取枚举