加入两本词典
本文关键字:两本 | 更新日期: 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);
注意,与使用from
和where
的示例相比,上述非常优选,因为其更有效。我在这里包括这一点是因为如果你和我一样(更熟悉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]);