2011-07-31 5 views
0

상상 목록의 필터 사전 나는>를 INT, 목록간단한 질문 :

List<String> B

및 사전 내가 < 문자열 사전을 반환 할 수있는 방법

Dictionary<String, int> A

이 Linq를 사용하여 A에서 B의 키로 필터링 했습니까?

답변

7

간단하고 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); 

합니다. 사전이 큰 경우

+0

당신에게 @ 존 감사합니다! 너 너무 빨라! – Seen

0

잘못된 컴퓨터를 사용하고 테스트 할 수 없기 때문에 머리가 아플 수 있습니다. 키/값 쌍을 필터링 할 Where를 사용하여,

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

, 당신은 A.

대신 B를 열거 할 수 있습니다
var filtered = B 
     .Where(key => A.ContainsKey(key)) 
     .ToDictionary(key => key, key => A[key]);