根据列表中存在的键值过滤字典

时间:2020-02-19 17:34:03

标签: c# linq dictionary

我有这样的字典D1

enter image description here

和这样的列表L1

enter image description here

我想拥有一个这样的字典(过滤那些键在列表中的键/值对)

enter image description here

因此,我尝试了D1.Where(x => L1.Contains(x.Key)),但是在keyvalue中却得到了两行带有empry字符串的字典。

请告知。

2 个答案:

答案 0 :(得分:1)

您可以使用类似这样的东西:

Dictionary<string, int> dictionary = new Dictionary<string, int> {{"A", 1}, {"B", 2}, {"C", 3}};

List<string> list = new List<string> {"A","B"};

var result = dictionary.Where(x => list.Contains(x.Key)).ToList();

var result = dictionary.Where(x => list.Contains(x.Key)).ToDictionary(x=>x.Key,x=>x.Value);

答案 1 :(得分:1)

有多种方法可以满足您的需求

如果D1的所有键都存在于L1中而没有对D1进行突变

Dictionary<string, string> D2 = new Dictionary<string, string>();
L1.ForEach(x => D2[x] = D1[x]);

OR

var D2 = L1.ToDictionary(el => el, key => D1[key]);

安全选项:

var D2 = D1.Keys.Intersect(L1).ToDictionary(key => key, key => D1[key]);

甚至更多,取决于您的创造力

请注意,这对于大型列表和字典来说很慢

D1.Where(x => L1.Contains(x.Key))