2013-06-12 4 views
1

나는 다음과 같은 사전이 있습니다목록에서 사전에 일치하는 값을 찾으 시나요?

Dictionary<int, List<TypeA>> dict 

을 그리고 개체를 추가 한 :

dict.Add(1, new List<TypeA>{TypeA.1, TypeA.2, TypeA.3}; 
dict.Add(11, new List<TypeA>{TypeA.2, TypeA.6, TypeA.7}; 
dict.Add(23, new List<TypeA>{TypeA.3, TypeA.4, TypeA.9}; 

구문의 한 줄 (람다)를 사용하여, 나는 전체 사전에 어떤 TypeA.3을 찾을 수 있습니까 어떻게?

이것은 bool을 반환하는 메서드로 캡슐화됩니다. 참 == 일치하고 거짓 == 일치하지 않음. 위의 내용은 true를 반환합니다. 그냥 TypeA.3 어디서나 존재하는지 확인하려는 경우

답변

1

은 리드에서 영감을 몇 가지 작업 코드입니다.

LINQPad에이 팝업을 표시하여 실행할 수 있습니다. http://linqpad.com에서 LINQPad를 얻으면 도움이됩니다!

static bool CheckIT(Dictionary<int, List<TypeA>> theList, TypeA what) 
    { 
     return theList.Any(dctnry => dctnry.Value.Any(lst => lst == what)); 
    } 

    public static void Main() 
    { 
     Dictionary<int, List<int>> dict = new Dictionary<int, List<int>>(); 

     dict.Add(1, new List<TypeA>{TypeA.1, TypeA.2, TypeA.3}; 
     dict.Add(11, new List<TypeA>{TypeA.2, TypeA.6, TypeA.7}; 
     dict.Add(23, new List<TypeA>{TypeA.3, TypeA.4, TypeA.9}; 

     if (CheckIT(dict,TypeA.3)) 
     Console.WriteLine("Found"); 
     else 
      Console.WriteLine("Lost"); 
    } 

또한보다 한 단계 걸릴 수 있도록 이러한 일반 버전을

static bool CheckIT<T>(Dictionary<int, List<T>> theList, T what) where T : IEquatable<T> 
    { 
     return theList.Any(dict => dict.Value.Any(l => l.Equals(what))); 
    } 

로 다음

if (CheckIT<TypeA>(dict,TypeA.3)) 

을 말할 것입니다하지만 당신은 또한

if (CheckIT<int>(dict,13)) 
말할 수 있습니다

내가 그랬던 이래로 내가 한 것처럼. TypeA가 정의되어 있습니다.

1

, 당신은 사용할 수 있습니다

여기
bool exists = dict.Values.Any(v => v.Any(t => t == TypeA.3)); 
관련 문제