c# – 如何使用lambda / linq从集合中提取一些数据到对象?
发布时间:2020-12-16 01:29:39 所属栏目:百科 来源:网络整理
导读:我有一个IList Animals farmAnimals; 这个清单有三种类型, 奶牛 羊 鸡 我如何使用lambda查询或linq-to-objects从列表中删除所有鸡,所以我有一个单独的鸡列表,原始列表现在只有奶牛和绵羊. 我是否必须制作三个列表(原始的2个新列表,已过滤)然后将原始列表清空
我有一个IList< Animals> farmAnimals;
这个清单有三种类型, >奶牛 我如何使用lambda查询或linq-to-objects从列表中删除所有鸡,所以我有一个单独的鸡列表,原始列表现在只有奶牛和绵羊. 我是否必须制作三个列表(原始的2个新列表,已过滤)然后将原始列表清空?还是有一种比较棘手的方法? 结果需要 IList<Aniamls> chickens; IList<Animals> farmAnimals; // only contains the cows and sheep,now. 干杯! 澄清问题: 什么是更高效的? FindAll&删除所有与Where的建议? 解决方法
假设:
public abstract class Animal {} public class Chicken : Animal {} 你可以做: var chickens = animals.OfType<Chicken>().Cast<Animal>().ToList(); var nonChickens = animals.Except(chickens).ToList(); 编辑 任何合理的答案都应该是O(n),这意味着原始列表中的每个项目只处理一次.因此,我建议采取一种必要的方法: var chickens = new List<Animal>(); var nonChickens = new List<Animal>(); foreach(var animal in animals) { var list = animal is Chicken ? chickens : nonChickens; list.Add(animal); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |