问题描述
|
假设以下Employee类(是的,我知道我不应该公开公开List,但这只是一个例子):
class Employee
{
public string Name {get; set;}
public List<string> Skills {get; set;}
}
技能只是员工拥有的技能列表,例如“编程”,“客户服务”等。
现在假设我有一个List<Employee> CurrentEmployees
,并且我还有另一个雇员Employee NewHire
不在CurrentEmployees
列表中。
我的目标是使用lambda表达式来计算CurrentEmployees
中有多少雇员至少具有NewHire
也具有的一项技能。因此,例如,如果ѭ3one包含一个雇员拥有Skills{\'Programming\',\'Troubleshooting\'}
,另一个雇员具有Skills{\'Accounting\',\'Finance\'}
,而NewHire拥有Skills{\'Programming\',\'Networking\'}
,我想要一个返回1的表达式,因为列表中的第一个雇员也具有\ Programming \的技能。 .. 这可能吗?
谢谢你的帮助。
解决方法
currentEmployees.Count(ce =>
ce.Skills.Intersect(newHire.Skills).Any())
, var currentEmployees = new List<Employee>
{
new Employee { Skills = new List<string> { \"Programming\",\"Troubleshooting\" } },new Employee { Skills = new List<string> { \"Accounting\",\"Finance\" } },};
var newHire = new Employee { Skills = new List<string> { \"Programming\",\"Networking\" } };
var count = currentEmployees.Count(e => e.Skills.Any(newHire.Skills.Contains));
// count == 1
, 如果性能很重要,我将使用HashSet<string>
:
var newHireSkills = new HashSet<string>(newHire.Skills);
var count = currentEmployees.Count(e => e.Skills.Any(s => newHireSkills.Contains(s)));