2013-04-22 40 views
5

我有一本字典,其中的關鍵是一個ID,值是一個字符串C#是否有一個字典的ContainsAny()方法?

我現在的人一個對象列表,每個人都有一個CarIds屬性,它是一個

IEnumerable<int> 

我想基本上過濾對象列表,只包含字典中包含其中一個屬性的項目。

例如。是這樣的:

var dictionary = GetDict(); 

var people = GetPeople(); 

people = people.Where(r => dictionary.ContainsAny(r.CarIds)).ToList(); 

難道這樣的事情存在,我可以做一些類似的containsKey(東西),但在整數的列表檢查是否有?

+0

迂腐:C#甚至沒有字典,像ContainsAny少得多的方法。 .NET有詞典,可能有這種方法。 – 2013-04-22 18:19:27

回答

5

是的,你可以嘗試一下本作的列表:

people = people.Where(r => list.Intersect(r.CarIds).Count() != 0).ToList(); 

對於詞典,您可以使用此:

people = people.Where(r => r.CarIds.Any(n => dictionary.ContainsKey(n))).ToList(); 
+0

謝謝。一個調整,因爲它看起來像我需要list.Keys.Intersect給它的字典 – leora 2013-04-22 03:22:20

+0

@leora嘗試更新,它應該比'Intersect'快。 – dasblinkenlight 2013-04-22 03:25:39

+0

我不追隨你的更新答案,它似乎是返回布爾,但你正在做一個!= 0檢查。 。 – leora 2013-04-22 03:36:13

6

你最好的選擇可能是擴展詞典(這可能應該有一個ContainsAny()ContainsAnyKey())。

public static bool ContainsAny<K, V>(
     this Dictionary<K, V> dict, IEnumerable<K> keys) 
{ 
    foreach(K key in keys) 
     if(dict.ContainsKey(key)) return true; 
    return false; 
} 

,這可以作爲linq'd:

public static bool ContainsAny<K, V>(
      this Dictionary<K, V> dict, IEnumerable<K> keys) 
    { return keys.Any(key => dict.ContainsKey(key)); } 
相關問題