简单的问题:过滤列表的字典

时间:2011-07-31 21:03:13

标签: c# asp.net linq

想象一下我有一个清单

List<String> B

和字典

Dictionary<String, int> A

如何返回词典&lt; String,int &gt;使用Linq从B中使用B键中的A进行过滤?

3 个答案:

答案 0 :(得分:7)

很简单,使用Where过滤键/值对,然后使用ToDictionary构建新词典。

var c = A.Where(pair => B.Contains(pair.Key))
         .ToDictionary(pair => pair.Key, pair => pair.Value);

如果您有大量条目,则可能需要先创建HashSet<string>

var strings = new HashSet<string>(B);
var c = A.Where(pair => strings.Contains(pair.Key))
         .ToDictionary(pair => pair.Key, pair => pair.Value);

这样可以更快地测试每个密钥。

答案 1 :(得分:0)

出乎我的意思,因为我在错误的电脑上无法测试。但你应该明白这个想法:

A.Where(val => B.Contains(val.Key)).ToDictionary(val => val.Key, val => val.Value);

答案 2 :(得分:0)

如果字典很大,您可能想要枚举B而不是A.

var filtered = B
        .Where(key => A.ContainsKey(key))
        .ToDictionary(key => key, key => A[key]);