运维开发网

c# – 如何使用lambda / linq从集合中提取一些数据到对象?

运维开发网 https://www.qedev.com 2020-05-26 15:29 出处:网络 作者:运维开发网整理
我有一个IList< Animals> farmAnimals; 这个清单有三种类型, >奶牛 >羊 >鸡 我如何使用lambda查询或linq-to-objects从列表中删除所有鸡,所以我有一个单独的鸡列表,原始列表现在只有奶牛和绵羊. 我是否必须制作三个列表(原始的2个新列表,已过滤)然后将原始列表清空?还是有一种比较棘手的方法? 结果需要 IList<Aniamls> chickens;
我有一个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);
}
0

精彩评论

暂无评论...
验证码 换一张
取 消