将Dictionary <A,B> + Dictionary <B,C>组合起来创建Dictionary <A,C>

chi*_*tom 2 c# dictionary

有什么很酷的快速方法可以让两个字典创建第三个,将第一个键映射到内连接样式中的第二个值?

Dictionary<A,B> dic1 = new Dictionary<A,B> {{a1,b1},{a2,b2},{a3,b3}};
Dictionary<B,C> dic2 = new Dictionary<B,C> {{b1,c1},{b2,c2},{b4,c4}};

Dictionary<A,C> dic3 = SomeFunction(dic1,dic2);
// dic3 = {{a1,c1},{a2,c2}}
Run Code Online (Sandbox Code Playgroud)

Rol*_*oly 5

你可以做这样的事情来加入内在价值

Dictionary<int, string> first = new Dictionary<int, string> { {1, "hello"}, {2, "world"}};

Dictionary<string, bool> second = 
    new Dictionary<string, bool> { { "hello", true }, {"world", false}};

var result = (from f in first
              join s in second on f.Value equals s.Key
              select new { f.Key, s.Value }).ToDictionary(x => x.Key, y => y.Value);
Run Code Online (Sandbox Code Playgroud)

如果你转出结果,你会看到它是一个带有值的字典 {1: true, 2: false}

  • 字典通过O(1)查找实现为哈希表。Join假定要连接的序列*不是*快速查找表,因此它根据序列之一构建自己的快速查找表。因此,此解决方案的效率不比朴素的解决方案高,并且在操作过程中确实会产生大量垃圾。 (2认同)