加入两本词典

本文关键字:两本 | 更新日期: 2023-09-27 18:29:16

嗨,我有两个词典,我需要找到一种方法将它们连接在一起。这是两种字典类型。

IDictionary<string, byte[]> dictionary1
IDictionary<IFileShareDocument, string> dictionary2

在这两个字典中,我必须创建第三个看起来像的字典

IDictionary<IFileShareDocument, byte[]> dictionary3

两个字典都有完全相同数量的项,并且它们的字符串属性都是链接点。

我想要的是能够写出这样的东西:

dictionary1.value join with dictionary2.key
where dictionary1.key == dictionary2.value
This statement should result in dictionary3.

有什么办法可以实现这一点吗?我似乎找不到办法做到这一点?

加入两本词典

var dictionary3 =
    dictionary1
        .Join(dictionary2, x => x.Key, x => x.Value, (x, y) => new { x, y })
        .ToDictionary(a => a.y.Key, a => a.x.Value);

以下是使用LINQ查询语法和join(这与@KingKing的解决方案大致相同)来实现这一点的方法:

IDictionary<IFileShareDocument, byte[]> dictionary3 =
    (from item1 in dictionary1
     join item2 in dictionary2 on item1.Key equals item2.Value
     select new { item2.Key, item1.Value })
         .ToDictionary(x => x.Key, x => x.Value);

注意,与使用fromwhere的示例相比,上述非常优选,因为其更有效。我在这里包括这一点是因为如果你和我一样(更熟悉SQL,它会自动将类似的内容转换为联接),这种糟糕的方式可能是第一个想到的:

IDictionary<IFileShareDocument, byte[]> dictionary3 =
    (from item1 in dictionary1
     from item2 in dictionary2
     where item1.Key == item2.Value
     select new { item2.Key, item1.Value })
         .ToDictionary(x => x.Key, x => x.Value);

这对你有用吗?

var result =
    dictionary2
        .ToDictionary(x => x.Key, x => dictionary1[x.Value]);