我将一个词典声明为类型
var dictionary1 = Dictionary<string, Type1>
和另一个
var dictionary2 = Dictionary<string, Type2>
每个字典值类型都有一个名为classid
的公共变量,所以:
dictionary1["key"].classid = 100
也在:
dictionary2["key"].classid = 100
我知道它们的类型不同,但有没有一种内置的方法可以找到这两个私有变量的交叉点,并且可能会返回一个单一类型的字典?所以,如果classid是等价的,我可以得到Type1的交叉字典吗?
答案 0 :(得分: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匹配。然后将这些键值对转换为新的字典。
答案 1 :(得分: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);
答案 2 :(得分: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));
答案 3 :(得分:0)
是的,但字典可能不是你想要的,这个问题可能是不同的重复措辞:
C# Linq intersect/except with one part of object
顺便说一句,您想要用于交叉路口的房产应该是公共的。