c#有一个用于字典的ContainsAny()方法吗?

本文关键字:方法 ContainsAny 有一个 用于 字典 | 更新日期: 2023-09-27 18:10:26

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

我现在有一个person对象列表,其中每个person都有一个CarIds属性,该属性是

IEnumerable<int>

我想过滤对象列表,只包含字典中包含其中一个属性的项。

例如

。像这样:

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

是否存在这样的东西,我可以做一些类似于ContainsKey(),但检查任何在int列表?

c#有一个用于字典的ContainsAny()方法吗?

是的,您可以对列表尝试:

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

对于字典,您可以这样使用:

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

您最好的选择可能是扩展Dictionary(它可能应该有一个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;
 }

,这可以链接为:

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