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

leo*_*ora 5 c# linq collections

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

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

IEnumerable<int>
Run Code Online (Sandbox Code Playgroud)

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

例如.这样的事情:

var dictionary = GetDict();

var people = GetPeople();

 people = people.Where(r => dictionary.ContainsAny(r.CarIds)).ToList();
Run Code Online (Sandbox Code Playgroud)

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

Cha*_*ana 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;
 }
Run Code Online (Sandbox Code Playgroud)

这可以是linq'd:

    public static bool ContainsAny<K, V>(
           this Dictionary<K, V> dict, IEnumerable<K> keys)
    {  return keys.Any(key => dict.ContainsKey(key));  }
Run Code Online (Sandbox Code Playgroud)


das*_*ght 5

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

people = people.Where(r => list.Intersect(r.CarIds).Count() != 0).ToList();
Run Code Online (Sandbox Code Playgroud)

对于词典,您可以使用:

people = people.Where(r => r.CarIds.Any(n => dictionary.ContainsKey(n))).ToList();
Run Code Online (Sandbox Code Playgroud)