首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找不同字典值变量的相交

查找不同字典值变量的相交
EN

Stack Overflow用户
提问于 2014-05-15 08:49:07
回答 4查看 125关注 0票数 0

我有一本字典声明为

代码语言:javascript
复制
var dictionary1 = Dictionary<string, Type1>

另一种是

代码语言:javascript
复制
var dictionary2 = Dictionary<string, Type2>

每个字典值类型都有一个名为classid的公共变量,因此:

代码语言:javascript
复制
dictionary1["key"].classid = 100

还包括:

代码语言:javascript
复制
dictionary2["key"].classid = 100

我知道它们是不同的类型,但是是否有一种内在的方法可以找到这两个私有变量的交叉点,并可能返回给我一个单一类型的字典?那么,如果分类是等价的,我可以得到一个交叉的字典类型Dictionary1?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-05-15 08:54:22

这不是最优雅的查询,但它应该能做到这一点:

代码语言:javascript
复制
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中,并且其分类与dictionary2对象的分类匹配。然后将这些键值对转换为新的字典。

票数 1
EN

Stack Overflow用户

发布于 2014-05-15 09:08:12

作为ContainsKey的另一种选择,您还可以使用一个简单的join,对于更大的数据集,它更易读,而且(可能)更快:

代码语言:javascript
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2014-05-15 08:55:53

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

代码语言:javascript
复制
        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));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23673417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档