使用Linq将一本词典映射到另一本词典

时间:2020-03-06 19:18:17

标签: c# .net linq dictionary

在.NET框架中使用Linq是否有一种优雅的方法将一个Dictionary映射到另一个{}?

这可以通过用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));
    })

2 个答案:

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