C#是否有字典的ContainsAny()方法?

时间:2013-04-22 03:14:49

标签: c# linq collections

我有一个字典,其中Key是一个Id,值是一个字符串

我现在有一个人物对象列表,其中每个人都有一个

的CarIds属性
IEnumerable<int>

我想基本上过滤对象列表,只包含其中一个属性包含在dict中的项目。

例如。像这样的东西:

var dictionary = GetDict();

var people = GetPeople();

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

这样的事情是否存在于我可以做类似于ContainsKey()的事情,但检查一下整数列表中的任何一个?

2 个答案:

答案 0 :(得分: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));  }

答案 1 :(得分:5)

是的,你可以尝试这个列表:

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

对于词典,您可以使用:

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