我有这样的字典D1
和这样的列表L1
我想拥有一个这样的字典(过滤那些键在列表中的键/值对)
因此,我尝试了D1.Where(x => L1.Contains(x.Key))
,但是在key
和value
中却得到了两行带有empry字符串的字典。
请告知。
答案 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))