在.NET框架中使用Linq是否有一种优雅的方法将一个Dictionary
映射到另一个{1>}?
这可以通过用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));
})
答案 0 :(得分:4)
只需使用ToDictionary
命名空间中的System.Linq
扩展方法
View
由于Dictionary<TKey, TValue>
类实现了Fragment
并且 Path root = Paths.get("/root");
Path relative = root.resolve("relative");
Path absolute = Paths.get(root.toString(), "/absolute");
System.out.println("Path:");
System.out.println(relative.toAbsolutePath()); // prints "/root/relative"
System.out.println(absolute.toAbsolutePath()); // prints "/root/absolute"
System.out.println();
是var d2 = d1.ToDictionary(kvp => kvp.Key, kvp => int.Parse(kvp.Value));
的扩展方法,因此上面的代码可以正常工作
答案 1 :(得分:0)
请尝试以下操作:
var d1 = new Dictionary<string, string>() {
{ "One", "1" },
{ "Two", "2" }
};
// map dictionary 1 to dictionary 2 with LINQ
var d2 = d1.ToDictionary(kvp => kvp.Value, kvp => int.Parse(kvp.Value));