想象一下我有一个清单
List<String> B
和字典
Dictionary<String, int> A
如何返回词典&lt; String,int &gt;使用Linq从B中使用B键中的A进行过滤?
答案 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]);