0

我有一个字典声明为类型

var dictionary1 = Dictionary<string, Type1>

另一个作为

var dictionary2 = Dictionary<string, Type2>

每个字典值类型都有一个公共变量,称为classid

dictionary1["key"].classid = 100

也在:

dictionary2["key"].classid = 100

我知道它们是不同的类型,但是有没有一种内置的方法可以找到这两个私有变量的交集,并可能返回一个单一类型的字典?所以如果classid是等价的,我可以得到一个类型为Dictionary1的相交字典?

4

4 回答 4

1

作为Where/ContainsKey的替代品,您还可以使用简单的join,它对于更大的数据集更具可读性并且(可能)更快:

var result = from kv1 in dictionary1
             join kv2 in dictionary2 on 
                new {kv1.Key, kv1.Value.classid} equals 
                new {kv2.Key, kv2.Value.classid}
             select kv1;

var new_dict = result.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
于 2014-05-15T09:08:12.857 回答
1

这不是最优雅的查询,但它应该可以解决问题:

var intersection = dictionary1
.Where(kvp1 => 
   dictionary2.ContainsKey(kvp1.Key) 
   && dictionary2[kvp1.Key].classid = kvp1.Value.classid)
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

这应该获取 dictionary1 中的所有键值对,其键也存在于 dictionary2 中,并且其 classid 与 dictionary2 对象的 classid 匹配。然后将这些键值对转换为新字典。

于 2014-05-15T08:54:22.507 回答
0

您可以使用下面提到的代码

        Dictionary<int, string> t = new Dictionary<int, string>();
        Dictionary<int, string> t1 = new Dictionary<int, string>();
        t.Add(100, "f");
        t1.Add(100, "f2");

        var abc=t.Where(p=>t1.Any(q=>q.Key==p.Key));
于 2014-05-15T08:55:53.613 回答
0

是的,但字典可能不是你想要的,这个问题可能是重复的,措辞不同:

C# Linq 与对象的一部分相交/除外

顺便说一句,您要用于交叉路口的财产应该是公开的。

于 2014-05-15T09:00:50.233 回答