c# – 从列表中选择
发布时间:2020-12-16 00:16:16 所属栏目:百科 来源:网络整理
导读:我确定有一种很好的方法可以做到这一点(我猜测其中一种扩展方法?),但我很难在Google上找到它. 基本上我有一个自定义类列表;我想从中选择一些项目到一个新的List中,其中一个属性等于另一个List中的任何值. 这是我正在尝试做的一个(简化)快速示例: public cl
我确定有一种很好的方法可以做到这一点(我猜测其中一种扩展方法?),但我很难在Google上找到它.
基本上我有一个自定义类列表;我想从中选择一些项目到一个新的List中,其中一个属性等于另一个List中的任何值. 这是我正在尝试做的一个(简化)快速示例: public class Job { public int Number; public string ClientCompanyName; } List<Job> lstJobs = new List<Job>(); List<Job> lstCompare = new List<Job>(); 通常我会这样做: List<Job> lstFiltered = new List<Job>(); foreach(Job jobThis in lstCompare) { foreach(jobComp in lstCompare) { if(jobThis.Number = jobComp.Number) { lstFiltered.Add(jobThis); } } } 是否有一种扩展方法可以将最后一位加入(理想情况下)单行? 干杯 解决方法var lstFiltered = lstJobs .Where(job => lstCompare.Any(item => item.Number == job.Number)) .ToList(); 如果lstCompare中的项目数量很少,则上述解决方案很有效.对于更大的比较列表,您可能希望使用一些基于散列的集合. var compareSet = new HashSet<int>(lstCompare.Select(item => item.Number)); var lstFiltered = lstJobs .Where(job => compareSet.Contains(job.Number)) .ToList(); 如果比较条件更复杂或者在几个地方需要它,则应创建一个实现IEqualityComparer< T>的比较器类.然后你可以像其他人已经建议的那样使用 我的第二个例子可以很容易地改为使用IEqualityComparer< T>如有必要. HashSet< T>将比较器作为第二个参数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |