我有一个IList<Animals> farmAnimals;
这个列表有三种类型,
如何使用lambda查询或linq to对象将所有鸡从列表中删除,以便我有一个单独的鸡列表,而最初的列表现在只有奶牛和绵羊。
我是否必须列出三个列表(原来的+2个新列表,过滤后),然后使原始列表无效?还是有更棘手的方法?
结果需要
IList<Aniamls> chickens;
IList<Animals> farmAnimals; // only contains the cows and sheep, now.干杯!
澄清问题:
什么更有表现力?FindAll & RemoveAll对哪里的建议?
发布于 2009-01-14 01:47:13
假设:
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);
}发布于 2009-01-14 01:33:25
var chickens = farmAnimals.ToList().FindAll (c => c.Type == "Chicken");
farmAnimals.RemoveAll(a => a.Type=="Chicken");发布于 2009-01-14 01:40:05
var chickens = farmAnimals.Where(a => a.GetType() == typeof(Chicken)).ToList();
farmAnimals = farmAnimals.Where(a => a.GetType() != typeof(Chicken)).ToList();https://stackoverflow.com/questions/441576
复制相似问题