我有一个 IList<Animals> farmAnimals;
这个列表有三种类型,
- 奶牛
- 绵羊
- 鸡
我如何使用 lambda 查询 或 linq-to-objects 从列表中删除所有的鸡,这样我现在就有了一个单独的鸡列表和原始列表只有牛和羊。
我是否必须制作三个列表(原始列表 + 2 个新列表,已过滤)然后将原始列表清空?还是有更棘手的方法?
结果需要是
IList<Aniamls> chickens;
IList<Animals> farmAnimals; // only contains the cows and sheep, now.
干杯!
澄清问题:
什么更高效? FindAll 和 RemoveAll 与 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);
}
关于c# - 如何使用 lambda/linq to objects 从集合中提取一些数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/441576/