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列表?
是的,您可以对列表尝试:
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)); }