2013-06-12 32 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}; 

語法的單行(lambda表達式),我怎麼發現整個辭典任何TypeA.3?

這將被封裝到一個返回bool的方法中。 True ==匹配和false ==不匹配。以上將返回true。

回答

1

這裏是由勵啓發一些工作代碼。

你可以將它彈出到LINQPad並看到它運行。獲取LINQPad在http://linqpad.com它有幫助!

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

如果你只是想看看是否TypeA.3存在的任何地方,你可以使用:

bool exists = dict.Values.Any(v => v.Any(t => t == TypeA.3)); 
相關問題